From 7d23fa58ddcd27944818aa710e1acbd81deaf5b3 Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Mon, 19 Jan 2026 18:48:49 +0100 Subject: [PATCH 1/2] Properly remove items from shelves --- .../java/org/bukkit/block/ChiseledBookshelf.java | 1 - .../inventory/CraftInventoryChiseledBookshelf.java | 13 ------------- .../craftbukkit/inventory/CraftInventoryShelf.java | 12 ------------ 3 files changed, 26 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/block/ChiseledBookshelf.java b/paper-api/src/main/java/org/bukkit/block/ChiseledBookshelf.java index 92f41d00dcb4..b677ccef2199 100644 --- a/paper-api/src/main/java/org/bukkit/block/ChiseledBookshelf.java +++ b/paper-api/src/main/java/org/bukkit/block/ChiseledBookshelf.java @@ -1,6 +1,5 @@ package org.bukkit.block; -import org.bukkit.inventory.BlockInventoryHolder; import org.bukkit.inventory.ChiseledBookshelfInventory; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryChiseledBookshelf.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryChiseledBookshelf.java index 8b7ec544546a..121270fc5c8a 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryChiseledBookshelf.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryChiseledBookshelf.java @@ -3,24 +3,11 @@ import net.minecraft.world.level.block.entity.ChiseledBookShelfBlockEntity; import org.bukkit.block.ChiseledBookshelf; import org.bukkit.inventory.ChiseledBookshelfInventory; -import org.bukkit.inventory.ItemStack; public class CraftInventoryChiseledBookshelf extends CraftInventory implements ChiseledBookshelfInventory { public CraftInventoryChiseledBookshelf(ChiseledBookShelfBlockEntity inventory) { super(inventory); - - } - - @Override - public void setItem(int index, ItemStack item) { - net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item); - - if (nms.isEmpty()) { - this.getInventory().removeItemNoUpdate(index); - } else { - this.getInventory().setItem(index, nms); - } } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryShelf.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryShelf.java index b6c1e6b1df36..d517de047b27 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryShelf.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryShelf.java @@ -2,7 +2,6 @@ import net.minecraft.world.level.block.entity.ShelfBlockEntity; import org.bukkit.block.Shelf; -import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ShelfInventory; public class CraftInventoryShelf extends CraftInventory implements ShelfInventory { @@ -11,17 +10,6 @@ public CraftInventoryShelf(ShelfBlockEntity inventory) { super(inventory); } - @Override - public void setItem(int index, ItemStack item) { - net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item); - - if (nms.isEmpty()) { - this.getInventory().removeItemNoUpdate(index); - } else { - this.getInventory().setItem(index, nms); - } - } - @Override public Shelf getHolder() { return (Shelf) this.inventory.getOwner(); From 488698068dc34cb77b2946801ac1077e5fed410a Mon Sep 17 00:00:00 2001 From: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com> Date: Mon, 19 Jan 2026 22:45:21 +0100 Subject: [PATCH 2/2] simplify jukebox inventory too and fix NPE for unplaced jukebox --- .../level/block/entity/JukeboxBlockEntity.java.patch | 8 ++++++++ .../craftbukkit/inventory/CraftInventoryJukebox.java | 10 +++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java.patch index 004ae297513a..01991de73ec6 100644 --- a/paper-server/patches/sources/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java.patch @@ -45,6 +45,14 @@ public static final String SONG_ITEM_TAG_ID = "RecordItem"; public static final String TICKS_SINCE_SONG_STARTED_TAG_ID = "ticks_since_song_started"; private ItemStack item = ItemStack.EMPTY; +@@ -114,6 +_,7 @@ + @Override + public void setTheItem(ItemStack item) { + this.item = item; ++ if (this.level == null) return; // Paper - for unplaced block state + boolean flag = !this.item.isEmpty(); + Optional> optional = JukeboxSong.fromStack(this.level.registryAccess(), this.item); + this.notifyItemChangedInJukebox(flag); @@ -133,7 +_,7 @@ @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryJukebox.java b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryJukebox.java index d5edca2e5f95..e81534fda82f 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryJukebox.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryJukebox.java @@ -1,23 +1,19 @@ package org.bukkit.craftbukkit.inventory; -import net.minecraft.world.Container; +import net.minecraft.world.level.block.entity.JukeboxBlockEntity; import org.bukkit.block.Jukebox; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.JukeboxInventory; public class CraftInventoryJukebox extends CraftInventory implements JukeboxInventory { - public CraftInventoryJukebox(Container inventory) { + public CraftInventoryJukebox(JukeboxBlockEntity inventory) { super(inventory); } @Override public void setRecord(ItemStack item) { - if (item == null) { - this.inventory.removeItem(0, 0); - } else { - this.setItem(0, item); - } + this.setItem(0, item); } @Override