diff --git a/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java
index fd943c5e1..c0df29347 100644
--- a/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java
@@ -5,6 +5,7 @@ import net.minecraft.client.render.TileEntityRenderDispatcher;
 import net.minecraft.client.render.block.model.BlockModelDispatcher;
 import net.minecraft.client.render.renderer.BlendFactor;
 import net.minecraft.client.render.renderer.GLRenderer;
+import net.minecraft.client.render.renderer.Shaders;
 import net.minecraft.client.render.renderer.State;
 import net.minecraft.client.render.tileentity.TileEntityRenderer;
 import net.minecraft.client.render.texture.stitcher.TextureRegistry;
@@ -15,6 +16,7 @@ import net.minecraft.core.entity.EntityFallingBlock;
 import net.minecraft.core.world.BlocksContainer;
 import net.minecraft.core.world.pos.TilePos;
 import org.jetbrains.annotations.NotNull;
+import org.lwjgl.opengl.GL41;
 
 public class EntityRendererFallingBlock extends EntityRenderer<EntityFallingBlock> {
     private final Minecraft mc;
@@ -35,7 +37,13 @@ public class EntityRendererFallingBlock extends EntityRenderer<EntityFallingBloc
         GLRenderer.setColor4f(1f, 1f, 1f, 1f);
         GLRenderer.setLightmapCoord2f(15, 15);
         GLRenderer.modelM4f().translate((float) x, (float) y, (float) z);
+        GLRenderer.setShader(Shaders.ITEM);
         TextureRegistry.worldAtlas.bind();
+        GL41.glActiveTexture(GL41.GL_TEXTURE2);
+        TextureRegistry.worldAtlas.layerTextureMap.get("emissive").bind();
+        GL41.glActiveTexture(GL41.GL_TEXTURE3);
+        TextureRegistry.worldAtlas.layerTextureMap.get("maskColor").bind();
+        GL41.glActiveTexture(GL41.GL_TEXTURE0);
         GLRenderer.setBlendFunc(BlendFactor.SRC_ALPHA, BlendFactor.ONE_MINUS_SRC_ALPHA);
         GLRenderer.enableState(State.BLEND);
         GLRenderer.disableState(State.CULL_FACE);
diff --git a/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSheep.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSheep.java
index f4728437a..67054d433 100644
--- a/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSheep.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSheep.java
@@ -76,7 +76,7 @@ public class MobRendererSheep extends MobRenderer<MobSheep> {
             // Hold head down and bob
             else if (headBobTime < 35)
             {
-                head.rotX = -60 * MathHelper.DEG_TO_RAD;
+                head.rotX = 60 * MathHelper.DEG_TO_RAD;
                 head.rotY = 0;
 
                 head.posY = -10 + (MathHelper.sin((headBobTime * 0.05f) * 30.5f) / 3.0f);
@@ -86,7 +86,7 @@ public class MobRendererSheep extends MobRenderer<MobSheep> {
             else if (headBobTime < 40)
             {
                 final float partPercentage = (headBobTime - 35) / 5;
-                head.rotX = -((headPitch * partPercentage) + (60 * (1 - partPercentage))) * MathHelper.DEG_TO_RAD;
+                head.rotX = ((headPitch * partPercentage) + (60 * (1 - partPercentage))) * MathHelper.DEG_TO_RAD;
                 head.rotY = headYaw * partPercentage * MathHelper.DEG_TO_RAD;
 
                 head.posY = -10 + 2 * (headBobTime - 34);
diff --git a/game/client/src/main/resources/assets/minecraft/models/block/lantern_firefly/red.json b/game/client/src/main/resources/assets/minecraft/models/block/lantern_firefly/red.json
index c597299a2..66acc6c88 100644
--- a/game/client/src/main/resources/assets/minecraft/models/block/lantern_firefly/red.json
+++ b/game/client/src/main/resources/assets/minecraft/models/block/lantern_firefly/red.json
@@ -1,5 +1,5 @@
 {
-  "parent": "minecraft:block/template_lantern_hanging",
+  "parent": "minecraft:block/template_lantern",
   "textures": {
     "all": "minecraft:block/lantern_firefly/red"
   }
diff --git a/game/core/src/main/java/net/minecraft/core/block/BlockLogicDoor.java b/game/core/src/main/java/net/minecraft/core/block/BlockLogicDoor.java
index c7cb0675a..a64af88db 100644
--- a/game/core/src/main/java/net/minecraft/core/block/BlockLogicDoor.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLogicDoor.java
@@ -137,13 +137,13 @@ public class BlockLogicDoor
         final int data = world.getBlockData(tilePos);
         if (this.isTop) {
             final Block<?> b = world.getBlockType(tilePos.down(queryPos));
-            if (b != null && b.getLogic() instanceof BlockLogicDoor blockLogicDoor) {
+            if (b.getLogic() instanceof BlockLogicDoor blockLogicDoor) {
                 blockLogicDoor.onInteracted(world, tilePos.down(queryPos), player, side, xHit, yHit);
             }
             return true;
         }
         final @Nullable Block<?> b = world.getBlockType(tilePos.up(queryPos));
-        if (b != null && b.getLogic() instanceof BlockLogicDoor) {
+        if (b.getLogic() instanceof BlockLogicDoor) {
             world.setBlockDataNotify(tilePos.up(queryPos), data ^ MASK_OPENED);
         }
         final int openedData = data ^ MASK_OPENED;
@@ -175,17 +175,17 @@ public class BlockLogicDoor
         TilePos queryPos = new TilePos();
         if (this.isTop) {
             final @Nullable Block<?> b = world.getBlockType(tilePos.down(queryPos));
-            if (b != null && b.getLogic() instanceof BlockLogicDoor) {
+            if (b.getLogic() instanceof BlockLogicDoor) {
                 ((BlockLogicDoor) b.getLogic()).onPoweredBlockChange(world, tilePos.down(queryPos), isPowered);
             }
             return;
         }
-        final boolean isOpen = (world.getBlockData(tilePos) & 4) > 0;
+        final boolean isOpen = (world.getBlockData(tilePos) & MASK_OPENED) != 0;
         if (isOpen == isPowered) {
             return;
         }
         final @Nullable Block<?> b = world.getBlockType(tilePos.up(queryPos));
-        if (b != null && b.getLogic() instanceof BlockLogicDoor) {
+        if (b.getLogic() instanceof BlockLogicDoor) {
             world.setBlockDataNotify(tilePos.up(queryPos), data ^ MASK_OPENED);
         }
         world.setBlockDataNotify(tilePos, data ^ MASK_OPENED);
@@ -204,7 +204,7 @@ public class BlockLogicDoor
                 world.setBlockTypeNotify(tilePos, Blocks.AIR);
             }
             if (block.isSignalSource()) {
-                b.onNeighborChanged(world, tilePos.down(queryPos), b);
+                b.onNeighborChanged(world, tilePos.down(queryPos), block);
             }
         } else {
             boolean hasCommittedSuicide = false;
diff --git a/game/core/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
index 6d94479f9..7b31a7861 100644
--- a/game/core/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
@@ -8,21 +8,21 @@ import com.mojang.brigadier.suggestion.Suggestions;
 import com.mojang.brigadier.suggestion.SuggestionsBuilder;
 import net.minecraft.core.net.command.helpers.WorldFeatureParser;
 import net.minecraft.core.net.command.util.CommandHelper;
-import net.minecraft.core.world.generate.feature.WorldFeature;
+import net.minecraft.core.world.generate.feature.WorldFeatureInterface;
 
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.concurrent.CompletableFuture;
 
-public class ArgumentTypeWorldFeature implements ArgumentType<WorldFeature> {
+public class ArgumentTypeWorldFeature implements ArgumentType<WorldFeatureInterface> {
     private static final Collection<String> EXAMPLES = Arrays.asList("Dungeon[2, 2, 2]", "Cactus");
 
-    public static ArgumentType<WorldFeature> worldFeature() {
+    public static ArgumentType<WorldFeatureInterface> worldFeature() {
         return new ArgumentTypeWorldFeature();
     }
 
     @Override
-    public WorldFeature parse(StringReader reader) throws CommandSyntaxException {
+    public WorldFeatureInterface parse(StringReader reader) throws CommandSyntaxException {
         WorldFeatureParser parser = new WorldFeatureParser(reader);
         return parser.parse();
     }
diff --git a/game/core/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
index f6d5be8e9..a851a76dd 100644
--- a/game/core/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
@@ -8,14 +8,14 @@ import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
 import com.mojang.brigadier.tree.CommandNode;
 import net.minecraft.core.lang.I18n;
 import net.minecraft.core.net.command.CommandManager;
-import net.minecraft.core.world.LevelListener;
 import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.feature.WorldFeature;
+import net.minecraft.core.world.generate.feature.WorldFeatureInterface;
 import net.minecraft.core.net.command.CommandSource;
 import net.minecraft.core.net.command.arguments.ArgumentTypeIntegerCoordinates;
 import net.minecraft.core.net.command.arguments.ArgumentTypeWorldFeature;
 import net.minecraft.core.net.command.exceptions.CommandExceptions;
 import net.minecraft.core.net.command.helpers.IntegerCoordinates;
+import net.minecraft.core.world.pos.TilePos;
 
 public class CommandPlace implements CommandManager.CommandRegistry {
     private static final SimpleCommandExceptionType FAILURE = new SimpleCommandExceptionType(() -> I18n.getInstance().translateKey("command.commands.place.exception_failure"));
@@ -23,11 +23,11 @@ public class CommandPlace implements CommandManager.CommandRegistry {
     public void register(CommandDispatcher<CommandSource> dispatcher) {
         CommandNode<CommandSource> command = dispatcher.register(ArgumentBuilderLiteral.<CommandSource>literal("place")
                 .requires(CommandSource::hasAdmin)
-                .then(ArgumentBuilderRequired.<CommandSource, WorldFeature>argument("feature", ArgumentTypeWorldFeature.worldFeature())
+                .then(ArgumentBuilderRequired.<CommandSource, WorldFeatureInterface>argument("feature", ArgumentTypeWorldFeature.worldFeature())
                         .then(ArgumentBuilderRequired.<CommandSource, IntegerCoordinates>argument("position", ArgumentTypeIntegerCoordinates.intCoordinates())
                                 .executes(c -> {
                                     CommandSource source = c.getSource();
-                                    WorldFeature feature = c.getArgument("feature", WorldFeature.class);
+                                    WorldFeatureInterface feature = c.getArgument("feature", WorldFeatureInterface.class);
                                     IntegerCoordinates coordinates = c.getArgument("position", IntegerCoordinates.class);
                                     World world = source.getWorld();
 
@@ -37,7 +37,7 @@ public class CommandPlace implements CommandManager.CommandRegistry {
                                     int y = coordinates.getY(source, true);
                                     int z = coordinates.getZ(source);
 
-                                    boolean success = feature.place(world, source.getWorld().rand, x, y, z);
+                                    boolean success = feature.place(world, source.getWorld().rand, new TilePos(x, y, z));
                                     if (success) {
                                         world.allChanged(true, false);
                                         source.sendTranslatableMessage("command.commands.place.success", feature.getClass().getSimpleName().substring(12), x, y, z);
diff --git a/game/core/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
index a52b0462a..a89a13518 100644
--- a/game/core/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
@@ -7,6 +7,7 @@ import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
 import com.mojang.brigadier.suggestion.Suggestions;
 import com.mojang.brigadier.suggestion.SuggestionsBuilder;
 import net.minecraft.core.lang.I18n;
+import net.minecraft.core.world.generate.feature.WorldFeatureInterface;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 import net.minecraft.core.net.command.util.CommandHelper;
 
@@ -37,13 +38,13 @@ public class WorldFeatureParser {
         return suggestionsBuilder.add(suggestionsBuilder2).buildFuture();
     }
 
-    public WorldFeature parse() throws CommandSyntaxException {
+    public WorldFeatureInterface parse() throws CommandSyntaxException {
         this.startPosition = this.reader.getCursor();
         this.suggestions = this::suggestWorldFeatures;
         final String string = this.reader.readString();
-        Class<? extends WorldFeature> worldFeatureClass = null;
+        Class<? extends WorldFeatureInterface> worldFeatureClass = null;
 
-        for (Map.Entry<String, Class<? extends WorldFeature>> entry : CommandHelper.WORLD_FEATURES.entrySet()) {
+        for (Map.Entry<String, Class<? extends WorldFeatureInterface>> entry : CommandHelper.WORLD_FEATURES.entrySet()) {
             if (CommandHelper.matchesKeyString(entry.getKey(), string)) {
                 worldFeatureClass = entry.getValue();
             }
@@ -73,7 +74,7 @@ public class WorldFeatureParser {
         return this.parseParameters(worldFeatureClass);
     }
 
-    private WorldFeature parseParameters(Class<? extends WorldFeature> worldFeatureClass) throws CommandSyntaxException {
+    private WorldFeatureInterface parseParameters(Class<? extends WorldFeatureInterface> worldFeatureClass) throws CommandSyntaxException {
         this.suggestions = this::suggestOpenParameters;
         Constructor<?> constructor;
         if (this.reader.canRead()) this.suggestions = CommandHelper.NO_SUGGESTIONS;
@@ -107,7 +108,7 @@ public class WorldFeatureParser {
             this.suggestions = CommandHelper.NO_SUGGESTIONS;
 
             try {
-                return (WorldFeature) constructor.newInstance(Utils.toArray(Object.class, parameters));
+                return (WorldFeatureInterface) constructor.newInstance(Utils.toArray(Object.class, parameters));
             } catch (Exception e) {
                 throw new CommandSyntaxException(CommandSyntaxException.BUILT_IN_EXCEPTIONS.dispatcherUnknownArgument(), () -> I18n.getInstance().translateKey("command.argument_types.world_feature.invalid_world_feature"));
             }
diff --git a/game/core/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
index 81c487f46..84f58dbe0 100644
--- a/game/core/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
@@ -28,7 +28,7 @@ import java.util.function.BiFunction;
 import java.util.function.Consumer;
 
 public class CommandHelper {
-    public static final Map<String, Class<? extends WorldFeature>> WORLD_FEATURES = new HashMap<>();
+    public static final Map<String, Class<? extends WorldFeatureInterface>> WORLD_FEATURES = new HashMap<>();
 
     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) -> {
@@ -214,11 +214,11 @@ public class CommandHelper {
         registerWorldFeatureClass(WorldFeatureSpoonerTreeStick.class);
     }
 
-    public static <T extends WorldFeature> void registerWorldFeatureClass(@NotNull final Class<T> tClass) {
+    public static <T extends WorldFeatureInterface> void registerWorldFeatureClass(@NotNull final Class<T> tClass) {
         registerWorldFeatureClass(tClass, tClass.getSimpleName().substring(12));
     }
 
-    public static <T extends WorldFeature> void registerWorldFeatureClass(@NotNull final Class<T> tClass, @NotNull final String name) {
+    public static <T extends WorldFeatureInterface> void registerWorldFeatureClass(@NotNull final Class<T> tClass, @NotNull final String name) {
         WORLD_FEATURES.put(name, tClass);
     }
 }
diff --git a/game/core/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
index 1123be4bc..ebfa5e378 100644
--- a/game/core/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
@@ -224,7 +224,12 @@ public class ContainerInventory
                 stack.updateAnimation(this.player.world, this.player, i, this.currentSlot == i);
             }
         }
-
+        for (int i = 0; i < armorInventory.length; i++) {
+            final @Nullable ItemStack stack = this.armorInventory[i];
+            if (stack != null) {
+                stack.updateAnimation(this.player.world, this.player, NBT_ARMOR_SLOT_OFFSET + i, false);
+            }
+        }
     }
 
     public boolean consumeInventoryItem(final int itemId) {
diff --git a/game/core/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
index 32b506157..feb6b094d 100644
--- a/game/core/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,12 +1,13 @@
 package net.minecraft.core.world.generate.chunk;
 
 import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.feature.WorldFeature;
 import org.jetbrains.annotations.NotNull;
 
 public interface ChunkDecorator
 {
     /**
-     * Places {@link net.minecraft.core.world.generate.feature.WorldFeature world features} on a given chunk.
+     * Places {@link WorldFeature world features} on a given chunk.
      */
     void decorate(@NotNull Chunk chunk);
 }
diff --git a/game/core/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
index 50646cf94..111a7145c 100644
--- a/game/core/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
@@ -12,6 +12,7 @@ import net.minecraft.core.world.noise.FractalNoise2D;
 import net.minecraft.core.world.noise.FractalNoise3D;
 import net.minecraft.core.world.noise.ImprovedPerlinNoise;
 import net.minecraft.core.world.noise.Noise2D;
+import net.minecraft.core.world.pos.TilePos;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.Random;
@@ -42,6 +43,8 @@ public class ChunkDecoratorNether
         int z = chunkZ * 16;
         Biome biome = this.world.getBlockBiome(x + 16, minY, z + 16);
 
+        final @NotNull TilePos ti = new TilePos();
+
         if (biome == Biomes.NETHER_CRYSTAL_FOREST) {
             double noiseScale = 0.5;
 
@@ -128,10 +131,12 @@ public class ChunkDecoratorNether
         if (biome == Biomes.NETHER_BONEYARD) {
             max = rand.nextInt(20) + 5;
             for (int i = 0; i < max; i++) {
-                int xf = x + rand.nextInt(16) + 8;
-                int yf = this.world.getWorldType().getOceanY() + rand.nextInt(rangeY - 8) + 4;
-                int zf = z + rand.nextInt(16) + 8;
-                (new WorldFeatureColdFire()).place(this.world, rand, xf, yf, zf);
+                ti.set(
+                    x + rand.nextInt(16) + 8,
+                    this.world.getWorldType().getOceanY() + rand.nextInt(rangeY - 8) + 4,
+                    z + rand.nextInt(16) + 8
+                );
+                (new WorldFeatureColdFire()).place(this.world, rand, ti);
             }
         }
 
diff --git a/game/core/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
index a199b81af..5029744b0 100644
--- a/game/core/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
@@ -14,7 +14,6 @@ import net.minecraft.core.block.material.Materials;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.biome.Biomes;
 import net.minecraft.core.world.noise.FractalNoise2D;
-import net.minecraft.core.world.noise.FractalNoise3D;
 import net.minecraft.core.world.noise.ImprovedPerlinNoise;
 import net.minecraft.core.world.type.WorldTypes;
 import net.minecraft.core.world.biome.Biome;
diff --git a/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/b173/ChunkDecoratorOverworldB173.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/b173/ChunkDecoratorOverworldB173.java
index f2353f4d7..9878ff5b1 100644
--- a/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/b173/ChunkDecoratorOverworldB173.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/b173/ChunkDecoratorOverworldB173.java
@@ -9,7 +9,6 @@ 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.FractalNoise2D;
-import net.minecraft.core.world.noise.FractalNoise3D;
 import net.minecraft.core.world.noise.ImprovedPerlinNoise;
 import org.jetbrains.annotations.NotNull;
 
diff --git a/game/core/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
index f65f70537..cfd089622 100644
--- a/game/core/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
@@ -14,7 +14,6 @@ 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.FractalNoise2D;
-import net.minecraft.core.world.noise.FractalNoise3D;
 import net.minecraft.core.world.noise.ImprovedPerlinNoise;
 import org.jetbrains.annotations.NotNull;
 
diff --git a/game/core/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
index f0810ce1f..2630f5cc5 100644
--- a/game/core/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
@@ -15,7 +15,6 @@ 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.FractalNoise2D;
-import net.minecraft.core.world.noise.FractalNoise3D;
 import net.minecraft.core.world.noise.ImprovedPerlinNoise;
 import org.jetbrains.annotations.NotNull;
 
diff --git a/game/core/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
index 56b069bac..2f570bcb8 100644
--- a/game/core/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
@@ -1,14 +1,17 @@
 package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.pos.TilePosc;
+import org.jetbrains.annotations.NotNull;
 
 import java.util.Random;
 
-public abstract class WorldFeature
+@Deprecated
+public abstract class WorldFeature implements WorldFeatureInterface
 {
-
-    public WorldFeature()
-    {
+    @Override
+    public boolean place(final @NotNull World world, final @NotNull Random random, final @NotNull TilePosc tilePos) {
+        return this.place(world, random, tilePos.x(), tilePos.y(), tilePos.z());
     }
 
     public abstract boolean place(World world, Random random, int x, int y, int z);
diff --git a/game/core/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
index 63244bdcc..518e2a02e 100644
--- a/game/core/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
@@ -3,24 +3,31 @@ package net.minecraft.core.world.generate.feature;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.material.Materials;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.pos.TilePos;
+import net.minecraft.core.world.pos.TilePosc;
+import org.jetbrains.annotations.NotNull;
 
 import java.util.Random;
 
-public class WorldFeatureAlgae extends WorldFeature
-{
+public class WorldFeatureAlgae implements WorldFeatureInterface {
 
     @Override
-    public boolean place(World world, Random random, int x, int y, int z)
-    {
-        for(int l = 0; l < 128; l++)
-        {
-            int i1 = (x + random.nextInt(8)) - random.nextInt(8);
-            int j1 = (y);
-            int k1 = (z + random.nextInt(8)) - random.nextInt(8);
-            if((world.getBlockId(i1, j1, k1) == Blocks.FLUID_WATER_STILL.id()) &&
-                    world.getBlockMaterial(i1, j1+1, k1) == Materials.AIR)
-            {
-                world.setBlock(i1, j1+1, k1, Blocks.ALGAE.id());
+    public boolean place(final @NotNull World world, final @NotNull Random random, final @NotNull TilePosc tilePos) {
+        final @NotNull TilePos ti = new TilePos();
+        final @NotNull TilePos tiUp = new TilePos();
+
+        for (int i = 0; i < 128; i++) {
+            ti.set(
+                (tilePos.x() + random.nextInt(8)) - random.nextInt(8),
+                tilePos.y(),
+                (tilePos.z() + random.nextInt(8)) - random.nextInt(8)
+            );
+
+            if (
+                world.getBlockType(ti) == Blocks.FLUID_WATER_STILL &&
+                world.getBlockMaterial(ti.up(tiUp)) == Materials.AIR
+            ) {
+                world.setBlockType(tiUp, Blocks.ALGAE);
             }
         }
 
diff --git a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureColdFire.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureColdFire.java
index 48f6ffdd6..35bf1e3e5 100644
--- a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureColdFire.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureColdFire.java
@@ -2,27 +2,27 @@ package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.pos.TilePos;
+import net.minecraft.core.world.pos.TilePosc;
+import org.jetbrains.annotations.NotNull;
 
 import java.util.Random;
 
-public class WorldFeatureColdFire extends WorldFeature
-{
+public class WorldFeatureColdFire implements WorldFeatureInterface {
+    @Override
+    public boolean place(final @NotNull World world, final @NotNull Random random, final @NotNull TilePosc tilePos) {
+        final @NotNull TilePos ti = new TilePos();
+        final @NotNull TilePos tiDown = new TilePos();
 
-    public WorldFeatureColdFire()
-    {
-    }
+        for (int i = 0; i < 64; i++) {
+            ti.set(
+                (tilePos.x() + random.nextInt(8)) - random.nextInt(8),
+                (tilePos.y() + random.nextInt(4)) - random.nextInt(4),
+                (tilePos.z() + random.nextInt(8)) - random.nextInt(8)
+            );
 
-    @Override
-	public boolean place(World world, Random random, int x, int y, int z)
-    {
-        for(int l = 0; l < 64; l++)
-        {
-            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) && world.getBlockId(i1, j1 - 1, k1) == Blocks.SOULSAND.id())
-            {
-                world.setBlockWithNotify(i1, j1, k1, Blocks.FIRE_COLD.id());
+            if (world.isAirBlock(ti) && world.getBlockType(ti.down(tiDown)) == Blocks.SOULSAND) {
+                world.setBlockTypeNotify(ti, Blocks.FIRE_COLD);
             }
         }
 
diff --git a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCrystalCeiling.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCrystalCeiling.java
index a8876e06d..863746d29 100644
--- a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCrystalCeiling.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCrystalCeiling.java
@@ -1,6 +1,5 @@
 package net.minecraft.core.world.generate.feature;
 
-import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 
diff --git a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCrystalCone.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCrystalCone.java
index c92dfa50d..742866bed 100644
--- a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCrystalCone.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCrystalCone.java
@@ -1,6 +1,5 @@
 package net.minecraft.core.world.generate.feature;
 
-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;
diff --git a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureInterface.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureInterface.java
new file mode 100644
index 000000000..7fa5aeefb
--- /dev/null
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureInterface.java
@@ -0,0 +1,11 @@
+package net.minecraft.core.world.generate.feature;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.pos.TilePosc;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Random;
+
+public interface WorldFeatureInterface {
+    boolean place(final @NotNull World world, final @NotNull Random random, final @NotNull TilePosc tilePos);
+}
diff --git a/game/core/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
index 0519e1427..138b96771 100644
--- a/game/core/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
@@ -1,13 +1,11 @@
 package net.minecraft.core.world.generate.feature;
 
 import it.unimi.dsi.fastutil.ints.Int2IntArrayMap;
-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;
 import org.jetbrains.annotations.NotNull;
 
-import java.util.Map;
 import java.util.Random;
 
 public class WorldFeatureOre extends WorldFeature
diff --git a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePebbles.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePebbles.java
index 88ac639a0..0c6309c0c 100644
--- a/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePebbles.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePebbles.java
@@ -2,7 +2,6 @@ package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLogicOverlayPebbles;
-import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.pos.TilePos;
 import org.jetbrains.annotations.NotNull;
diff --git a/game/core/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
index 4e2040184..e56147b2f 100644
--- a/game/core/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
@@ -7,7 +7,7 @@ import net.minecraft.core.world.World;
 
 import java.util.Random;
 
-public class WorldFeaturePermaice extends WorldFeature{
+public class WorldFeaturePermaice extends WorldFeature {
     private int blockId;
     private int numberOfBlocks;
     private int generateInId;
diff --git a/game/core/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
index d0e2e3746..2b537e328 100644
--- a/game/core/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
@@ -8,7 +8,7 @@ import net.minecraft.core.world.World;
 
 import java.util.Random;
 
-public class WorldFeaturePumice extends WorldFeature{
+public class WorldFeaturePumice extends WorldFeature {
     private int numberOfBlocks;
     private int generateInId;
     @MethodParametersAnnotation(names = {"numberOfBlocks"})
diff --git a/game/core/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
index 5fcb34792..55b4711d8 100644
--- a/game/core/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
@@ -17,11 +17,7 @@ import net.minecraft.core.world.chunk.ChunkPosition;
 import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
 import java.util.Random;
-import java.util.Set;
 
 public class WorldFeatureTreePalm extends WorldFeature {
 	
diff --git a/game/core/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
index 283fd33d2..b6265ffab 100644
--- a/game/core/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
@@ -6,6 +6,7 @@ import net.minecraft.core.world.World;
 import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 import net.minecraft.core.world.generate.feature.WorldFeatureAlgae;
+import net.minecraft.core.world.pos.TilePos;
 
 import java.util.Random;
 
@@ -123,7 +124,7 @@ public class WorldFeatureTreeShapeSwamp extends WorldFeature
             }
         }
 
-        (new WorldFeatureAlgae()).place(world, treeRand, x, oldY-1, z);
+        (new WorldFeatureAlgae()).place(world, treeRand, new TilePos(x, oldY - 1, z));
 
         return true;
     }
diff --git a/game/core/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
index 09110cadb..5dcb608b0 100644
--- a/game/core/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
@@ -8,7 +8,6 @@ import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 import net.minecraft.core.world.generate.feature.tree.WorldFeatureTree;
 
-import java.util.List;
 import java.util.Random;
 
 public abstract class WorldFeatureSpoonerTree
