diff --git a/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java
index 5d16b6db8..2e78e6357 100644
--- a/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java
@@ -290,6 +290,11 @@ public class PlayerLocal extends Player
         mc.displayScreen(new ScreenContainer(inventory, container));
     }
 
+    public void displayChestScreen(Container container, double x, double y, double z)
+    {
+        displayContainerScreen(container);
+    }
+
     @Override
     public void displayWorkbenchScreen(int x, int y, int z)
     {
diff --git a/game/client/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
index a25d6f762..5c8f1290f 100644
--- a/game/client/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
@@ -417,7 +417,9 @@ public final class BlockModelDispatcher
             .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/redstone/permafrost")
             .setAllTextures(OVERBRIGHT_TEXTURES, "minecraft:block/ore/redstone/overlay"));
 
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_STONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_STONE)
+            .setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/stone")
+            .setAllTextures(RETRO_BLOCK_TEXTURES, "minecraft:block/ore/diamond/stone_retro"));
         addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_BASALT).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/basalt"));
         addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_LIMESTONE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/limestone"));
         addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_GRANITE).setAllTextures(BLOCK_TEXTURES, "minecraft:block/ore/diamond/granite"));
diff --git a/game/client/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java b/game/client/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
index b43ec9b99..2d32a1086 100644
--- a/game/client/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
+++ b/game/client/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
@@ -181,6 +181,7 @@ public class TileEntityRendererSign extends TileEntityRenderer<TileEntitySign>
 
     private static void drawTexturedModalRect(final double width, final double height, final int color, final @NotNull IconCoordinate coordinate)
     {
+        if (coordinate == null) return;
         coordinate.parentAtlas.bind();
         final Tessellator tessellator = Tessellator.instance;
         tessellator.startDrawingQuads();
diff --git a/game/client/src/main/java/net/minecraft/client/sound/SoundEngine.java b/game/client/src/main/java/net/minecraft/client/sound/SoundEngine.java
index 945446b16..4d478c4bb 100644
--- a/game/client/src/main/java/net/minecraft/client/sound/SoundEngine.java
+++ b/game/client/src/main/java/net/minecraft/client/sound/SoundEngine.java
@@ -159,6 +159,8 @@ public class SoundEngine
 					soundSystem.play(BG_MUSIC);
 				}
 			}
+		} catch (Exception e) {
+			LOGGER.error("Unexpected exception while ticking sound engine!", e);
 		} finally {
 			lock.unlock();
 		}
@@ -236,6 +238,8 @@ public class SoundEngine
 					this.mc.subtitleTracker.heardSound(entry.parent, 0, 0, 0);
 				}
 			}
+		} catch (Exception e) {
+			LOGGER.error("Unexpected exception while playing sound '{}' at {} {} {}!", entry, e);
 		} finally {
 			lock.unlock();
 		}
@@ -288,6 +292,8 @@ public class SoundEngine
 					this.mc.subtitleTracker.heardSound(entry.parent, x, y, z);
 				}
 			}
+		} catch (Exception e) {
+			LOGGER.error("Unexpected exception while playing sound '{}' at {} {} {}!", entry, x, y, z, e);
 		} finally {
 			lock.unlock();
 		}
@@ -328,6 +334,8 @@ public class SoundEngine
 					playMusic(entry.name, x, y, z, volume, pitch);
 				}
 			}
+		} catch (Exception e) {
+			LOGGER.error("Unexpected exception while playing music '{}' at {} {} {}!", entry, x, y, z, e);
 		} finally {
 			lock.unlock();
 		}
diff --git a/game/client/src/main/java/net/minecraft/client/sound/SoundEntry.java b/game/client/src/main/java/net/minecraft/client/sound/SoundEntry.java
index ddf1aca97..a0f905a64 100644
--- a/game/client/src/main/java/net/minecraft/client/sound/SoundEntry.java
+++ b/game/client/src/main/java/net/minecraft/client/sound/SoundEntry.java
@@ -85,6 +85,16 @@ public class SoundEntry {
         }
     }
 
+    @Override
+    public String toString() {
+        return "SoundEntry{" +
+            "file=" + file +
+            ", name='" + name + '\'' +
+            ", pack=" + pack +
+            ", shouldStream=" + shouldStream +
+            '}';
+    }
+
     public enum Type {
         /**
          * Name interpreted as a file path from a namespace
diff --git a/game/core/src/main/java/net/minecraft/core/block/BlockLogicAlgae.java b/game/core/src/main/java/net/minecraft/core/block/BlockLogicAlgae.java
index 529407867..eb2a0240a 100644
--- a/game/core/src/main/java/net/minecraft/core/block/BlockLogicAlgae.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLogicAlgae.java
@@ -3,16 +3,22 @@ package net.minecraft.core.block;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.Entity;
+import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.entity.vehicle.EntityBoat;
 import net.minecraft.core.enums.EnumDropCause;
+import net.minecraft.core.item.IBonemealable;
 import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.LevelListener;
 import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
+import org.jetbrains.annotations.Nullable;
 
-public class BlockLogicAlgae extends BlockLogic
+import java.util.Random;
+
+public class BlockLogicAlgae extends BlockLogic implements IBonemealable
 {
 
     protected BlockLogicAlgae(Block<?> block, Material material)
@@ -77,4 +83,40 @@ public class BlockLogicAlgae extends BlockLogic
                 return null;
         }
     }
+
+    @Override
+    public boolean onBonemealUsed(ItemStack itemstack, @Nullable Player player, World world, int blockX, int blockY, int blockZ, Side side, double xPlaced, double yPlaced) {
+        Random rand = world.rand;
+        if (!world.isClientSide) {
+            if (player == null || player.getGamemode().consumeBlocks()) {
+                itemstack.stackSize--;
+            }
+            label0:
+            for (int i = 0; i < 128; i++) {
+                int _x = blockX;
+                int _z = blockZ;
+                for (int j = 0; j < i / 16; j++) {
+                    _x += rand.nextInt(3) - 1;
+                    _z += rand.nextInt(3) - 1;
+                    int bId = world.getBlockId(_x, blockY - 1, _z);
+                    int bMeta = world.getBlockMetadata(_x, blockY - 1, _z);
+                    if (bId != Blocks.FLUID_WATER_FLOWING.id() && bId != Blocks.FLUID_WATER_STILL.id()) {
+                        continue label0;
+                    }
+                    if (bMeta != 0) {
+                        continue label0;
+                    }
+                }
+
+                if (world.getBlockId(_x, blockY, _z) != 0) {
+                    continue;
+                }
+                if (rand.nextFloat() > 0.75) {
+                    world.setBlockWithNotify(_x, blockY, _z, block.id());
+                }
+            }
+            return true;
+        }
+        return true;
+    }
 }
diff --git a/game/core/src/main/java/net/minecraft/core/block/BlockLogicChest.java b/game/core/src/main/java/net/minecraft/core/block/BlockLogicChest.java
index cbbf2dfc6..bc3896e0d 100644
--- a/game/core/src/main/java/net/minecraft/core/block/BlockLogicChest.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLogicChest.java
@@ -308,7 +308,7 @@ public class BlockLogicChest extends BlockLogic implements IPaintable {
 		if(world.isClientSide) return true;
 		
 		checkIfOtherHalfExists(world, x, y, z);
-		player.displayContainerScreen(getInventory(world, x, y, z));
+		player.displayChestScreen(getInventory(world, x, y, z), x, y, z);
 		
 		return true;
 	}
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 db5b15bdb..d75c04aa7 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
@@ -322,14 +322,14 @@ public class BlockLogicDoor extends BlockLogic implements IPaintable
     public void setColor(World world, int x, int y, int z, DyeColor color) {
         final int meta = world.getBlockMetadata(x, y, z);
         if (isTop) {
-            world.setBlockAndMetadata(x, y, z, Blocks.DOOR_PLANKS_PAINTED_TOP.id(), meta);
+            world.setBlockAndMetadataRaw(x, y, z, Blocks.DOOR_PLANKS_PAINTED_TOP.id(), meta);
             Blocks.DOOR_PLANKS_PAINTED_TOP.getLogic().setColor(world, x, y, z, color);
-            world.setBlockAndMetadata(x, y - 1, z, Blocks.DOOR_PLANKS_PAINTED_BOTTOM.id(), meta);
+            world.setBlockAndMetadataRaw(x, y - 1, z, Blocks.DOOR_PLANKS_PAINTED_BOTTOM.id(), meta);
             Blocks.DOOR_PLANKS_PAINTED_BOTTOM.getLogic().setColor(world, x, y - 1, z, color);
         } else {
-            world.setBlockAndMetadata(x, y, z, Blocks.DOOR_PLANKS_PAINTED_BOTTOM.id(), meta);
+            world.setBlockAndMetadataRaw(x, y, z, Blocks.DOOR_PLANKS_PAINTED_BOTTOM.id(), meta);
             Blocks.DOOR_PLANKS_PAINTED_BOTTOM.getLogic().setColor(world, x, y, z, color);
-            world.setBlockAndMetadata(x, y + 1, z, Blocks.DOOR_PLANKS_PAINTED_TOP.id(), meta);
+            world.setBlockAndMetadataRaw(x, y + 1, z, Blocks.DOOR_PLANKS_PAINTED_TOP.id(), meta);
             Blocks.DOOR_PLANKS_PAINTED_TOP.getLogic().setColor(world, x, y + 1, z, color);
         }
     }
diff --git a/game/core/src/main/java/net/minecraft/core/entity/player/Player.java b/game/core/src/main/java/net/minecraft/core/entity/player/Player.java
index b4d665964..8c58eb7e1 100644
--- a/game/core/src/main/java/net/minecraft/core/entity/player/Player.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/player/Player.java
@@ -876,6 +876,10 @@ public abstract class Player
     {
     }
 
+    public void displayChestScreen(Container container, double x, double y, double z)
+    {
+    }
+
     public void displayWorkbenchScreen(int x, int y, int z)
     {
     }
diff --git a/game/core/src/main/java/net/minecraft/core/entity/vehicle/EntityMinecart.java b/game/core/src/main/java/net/minecraft/core/entity/vehicle/EntityMinecart.java
index 0f1c5c588..d7c7f3846 100644
--- a/game/core/src/main/java/net/minecraft/core/entity/vehicle/EntityMinecart.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/vehicle/EntityMinecart.java
@@ -773,7 +773,7 @@ public class EntityMinecart extends Entity implements Container {
                         setType(PASSENGER_CART);
                         setMeta(0);
                     } else {
-                        player.displayContainerScreen(this);
+                        player.displayChestScreen(this, this.x, this.y, this.z);
                     }
                 }
                 break;
diff --git a/game/server/src/main/java/net/minecraft/server/entity/player/PlayerServer.java b/game/server/src/main/java/net/minecraft/server/entity/player/PlayerServer.java
index 5c6da3b7c..8cb42b7f6 100644
--- a/game/server/src/main/java/net/minecraft/server/entity/player/PlayerServer.java
+++ b/game/server/src/main/java/net/minecraft/server/entity/player/PlayerServer.java
@@ -513,7 +513,6 @@ public class PlayerServer extends Player implements ContainerListener {
 	public void displayContainerScreen(Container container)
     {
         getNextWindowId();
-        PacketHandlerServer.LOGGER.info("{} interacted with chest at ({}, {}, {})", username, x, y, z);
         playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_GENERIC_CONTAINER, container.getNameTranslationKey(), container.getContainerSize()));
         craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new MenuContainer(inventory, container);
@@ -521,6 +520,11 @@ public class PlayerServer extends Player implements ContainerListener {
         craftingInventory.addSlotListener(this);
     }
 
+    public void displayChestScreen(Container container, double x, double y, double z) {
+        PacketHandlerServer.LOGGER.info("{} interacted with chest at ({}, {}, {})", username, x, y, z);
+        displayContainerScreen(container);
+    }
+
     @Override
 	public void displayFurnaceScreen(TileEntityFurnace tileEntity)
     {
diff --git a/util/seed-viewer/src/main/java/org/useless/seedviewer/gui/components/InfoPanel.java b/util/seed-viewer/src/main/java/org/useless/seedviewer/gui/components/InfoPanel.java
index de52b10a1..544ad9860 100644
--- a/util/seed-viewer/src/main/java/org/useless/seedviewer/gui/components/InfoPanel.java
+++ b/util/seed-viewer/src/main/java/org/useless/seedviewer/gui/components/InfoPanel.java
@@ -56,9 +56,9 @@ public class InfoPanel extends JPanel {
         seedLabel.setSize(0, textHeight);
         seedViewer.viewport.seed.addChangeListener(newValue -> seedLabel.setText("Seed: " + seedViewer.viewport.seed));
 
-        viewLabel = new JLabel(String.format("View: X:%s, Z:%s", seedViewer.viewport.viewX, seedViewer.viewport.viewZ));
+        viewLabel = new JLabel(String.format("View: X:%s, Z:%s", seedViewer.viewport.viewX.get(), -seedViewer.viewport.viewZ.get()));
         viewLabel.setSize(0, textHeight);
-        seedViewer.viewport.viewX.addChangeListener(newValue -> viewLabel.setText(String.format("View: X:%.2f, Z:%.2f", seedViewer.viewport.viewX.get(), seedViewer.viewport.viewZ.get())));
+        seedViewer.viewport.viewX.addChangeListener(newValue -> viewLabel.setText(String.format("View: X:%.2f, Z:%.2f", seedViewer.viewport.viewX.get(), -seedViewer.viewport.viewZ.get())));
         seedViewer.viewport.viewX.addChangeListener(newValue -> {
             Biome b = seedViewer.viewport.getHoveredBiome();
             if (b == null) {
@@ -67,7 +67,7 @@ public class InfoPanel extends JPanel {
                 biomeLabel.setText(String.format("Biome: %s", b.getName()));
             }
         });
-        seedViewer.viewport.viewZ.addChangeListener(newValue -> viewLabel.setText(String.format("View: X:%.2f, Z:%.2f", seedViewer.viewport.viewX.get(), seedViewer.viewport.viewZ.get())));
+        seedViewer.viewport.viewZ.addChangeListener(newValue -> viewLabel.setText(String.format("View: X:%.2f, Z:%.2f", seedViewer.viewport.viewX.get(), -seedViewer.viewport.viewZ.get())));
         seedViewer.viewport.viewZ.addChangeListener(newValue -> {
             Biome b = seedViewer.viewport.getHoveredBiome();
             if (b == null) {
