diff --git a/patches/api/Fix-Jukeboxes.patch b/patches/api/Fix-Jukeboxes.patch
new file mode 100644
index 0000000000..0b3358e5ad
--- /dev/null
+++ b/patches/api/Fix-Jukeboxes.patch
@@ -0,0 +1,58 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <jake.m.potrebic@gmail.com>
+Date: Tue, 14 Mar 2023 18:55:47 -0700
+Subject: [PATCH] Fix Jukeboxes
+
+
+diff --git a/src/main/java/org/bukkit/block/Jukebox.java b/src/main/java/org/bukkit/block/Jukebox.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/block/Jukebox.java
++++ b/src/main/java/org/bukkit/block/Jukebox.java
+@@ -0,0 +0,0 @@ import org.jetbrains.annotations.Nullable;
+ /**
+  * Represents a captured state of a jukebox.
+  */
+-public interface Jukebox extends TileState {
++public interface Jukebox extends TileState, org.bukkit.inventory.BlockInventoryHolder { // Paper
+ 
+     /**
+      * Gets the record inserted into the jukebox.
+@@ -0,0 +0,0 @@ public interface Jukebox extends TileState {
+      * @throws IllegalStateException if this block state is not placed
+      */
+     public boolean eject();
++    // Paper start
++    /**
++     * @return inventory
++     * @see Container#getInventory()
++     */
++    @NotNull
++    @Override
++    org.bukkit.inventory.Inventory getInventory();
++
++    /**
++     * @return snapshot inventory
++     * @see Container#getSnapshotInventory()
++     */
++    @NotNull
++    org.bukkit.inventory.Inventory getSnapshotInventory();
++    // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/event/inventory/InventoryType.java
++++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java
+@@ -0,0 +0,0 @@ public enum InventoryType {
+      */
+     @Deprecated @org.jetbrains.annotations.ApiStatus.Experimental // Paper - 1.20
+     SMITHING_NEW(4, "Upgrade Gear"),
++    // Paper start
++    /**
++     * Pseudo jukebox inventory
++     */
++    @org.jetbrains.annotations.ApiStatus.Experimental
++    JUKEBOX(1, "Jukebox");
++    // Paper end
+     ;
+ 
+     private final int size;
diff --git a/patches/server/Fix-Jukeboxes.patch b/patches/server/Fix-Jukeboxes.patch
new file mode 100644
index 0000000000..f41164014e
--- /dev/null
+++ b/patches/server/Fix-Jukeboxes.patch
@@ -0,0 +1,96 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Jake Potrebic <jake.m.potrebic@gmail.com>
+Date: Tue, 14 Mar 2023 18:55:56 -0700
+Subject: [PATCH] Fix Jukeboxes
+
+
+diff --git a/src/main/java/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java
++++ b/src/main/java/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java
+@@ -0,0 +0,0 @@ public class JukeboxBlockEntity extends BlockEntity implements Clearable, Contai
+ 
+     @Override
+     public int getMaxStackSize() {
+-        return 1;
++        return this.maxStack; // Paper
+     }
+ 
+     @Override
+@@ -0,0 +0,0 @@ public class JukeboxBlockEntity extends BlockEntity implements Clearable, Contai
+         this.level.updateNeighborsAt(this.getBlockPos(), this.getBlockState().getBlock());
+         this.setChanged();
+     }
++
++    // Paper start
++    public java.util.List<org.bukkit.entity.HumanEntity> transaction = new java.util.ArrayList<>();
++    private int maxStack = 1;
++    @Override
++    public java.util.List<net.minecraft.world.item.ItemStack> getContents() {
++        return this.items;
++    }
++
++    @Override
++    public void onOpen(org.bukkit.craftbukkit.entity.CraftHumanEntity who) {
++        this.transaction.add(who);
++    }
++
++    @Override
++    public void onClose(org.bukkit.craftbukkit.entity.CraftHumanEntity who) {
++        this.transaction.remove(who);
++    }
++
++    @Override
++    public java.util.List<org.bukkit.entity.HumanEntity> getViewers() {
++        return this.transaction;
++    }
++
++    @Override
++    public void setMaxStackSize(int size) {
++        this.maxStack = size;
++    }
++
++    @Override
++    public org.bukkit.Location getLocation() {
++        return new org.bukkit.Location(this.level.getWorld(), this.worldPosition.getX(), this.worldPosition.getY(), this.worldPosition.getZ());
++    }
++    // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java b/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java
++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java
+@@ -0,0 +0,0 @@ public class CraftJukebox extends CraftBlockEntityState<JukeboxBlockEntity> impl
+         jukebox.popOutRecord();
+         return result;
+     }
++    // Paper start
++    @Override
++    public org.bukkit.inventory.Inventory getInventory() {
++        if (!this.isPlaced()) {
++            return this.getSnapshotInventory();
++        }
++        return new org.bukkit.craftbukkit.inventory.CraftInventory(this.getTileEntity());
++    }
++
++    @Override
++    public org.bukkit.inventory.Inventory getSnapshotInventory() {
++        return new org.bukkit.craftbukkit.inventory.CraftInventory(this.getSnapshot());
++    }
++    // Paper end
+ }
+diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
++++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
+@@ -0,0 +0,0 @@ public class CraftInventory implements Inventory {
+             return InventoryType.COMPOSTER;
+         } else if (this instanceof CraftInventorySmithingNew) {
+             return InventoryType.SMITHING_NEW;
++            // Paper start
++        } else if (this.inventory instanceof net.minecraft.world.level.block.entity.JukeboxBlockEntity) {
++            return InventoryType.JUKEBOX;
++            // Paper end
+         } else {
+             return InventoryType.CHEST;
+         }