--- a/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java
@@ -16,12 +16,14 @@
 import net.minecraft.world.level.block.state.BlockState;
 
 public abstract class BaseContainerBlockEntity extends BlockEntity implements Container, MenuProvider, Nameable {
-    public LockCode lockKey = LockCode.NO_LOCK;
+
+    public LockCode lockKey;
     @Nullable
     public Component name;
 
     protected BaseContainerBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
         super(type, pos, state);
+        this.lockKey = LockCode.NO_LOCK;
     }
 
     @Override
@@ -29,7 +31,7 @@
         super.load(nbt);
         this.lockKey = LockCode.fromTag(nbt);
         if (nbt.contains("CustomName", 8)) {
-            this.name = Component.Serializer.fromJson(nbt.getString("CustomName"));
+            this.name = io.papermc.paper.util.MCUtil.getBaseComponentFromNbt("CustomName", nbt); // Paper - Catch ParseException
         }
 
     }
@@ -67,7 +69,7 @@
     protected abstract Component getDefaultName();
 
     public boolean canOpen(Player player) {
-        return canUnlock(player, this.lockKey, this.getDisplayName());
+        return BaseContainerBlockEntity.canUnlock(player, this.lockKey, this.getDisplayName());
     }
 
     public static boolean canUnlock(Player player, LockCode lock, Component containerName) {
@@ -87,4 +89,12 @@
     }
 
     protected abstract AbstractContainerMenu createMenu(int syncId, Inventory playerInventory);
+
+    // CraftBukkit start
+    @Override
+    public org.bukkit.Location getLocation() {
+        if (level == null) return null;
+        return new org.bukkit.Location(level.getWorld(), worldPosition.getX(), worldPosition.getY(), worldPosition.getZ());
+    }
+    // CraftBukkit end
 }
