Skip to content

Commit 06a7587

Browse files
authored
Properly remove items from shelves (#13567)
1 parent c6e0c79 commit 06a7587

5 files changed

Lines changed: 11 additions & 33 deletions

File tree

paper-api/src/main/java/org/bukkit/block/ChiseledBookshelf.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.bukkit.block;
22

3-
import org.bukkit.inventory.BlockInventoryHolder;
43
import org.bukkit.inventory.ChiseledBookshelfInventory;
54
import org.bukkit.util.Vector;
65
import org.jetbrains.annotations.NotNull;

paper-server/patches/sources/net/minecraft/world/level/block/entity/JukeboxBlockEntity.java.patch

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@
4545
public static final String SONG_ITEM_TAG_ID = "RecordItem";
4646
public static final String TICKS_SINCE_SONG_STARTED_TAG_ID = "ticks_since_song_started";
4747
private ItemStack item = ItemStack.EMPTY;
48+
@@ -114,6 +_,7 @@
49+
@Override
50+
public void setTheItem(final ItemStack itemStack) {
51+
this.item = itemStack;
52+
+ if (this.level == null) return; // Paper - for unplaced block state
53+
boolean itemWasInserted = !this.item.isEmpty();
54+
Optional<Holder<JukeboxSong>> maybeSong = JukeboxSong.fromStack(this.item);
55+
this.notifyItemChangedInJukebox(itemWasInserted);
4856
@@ -133,7 +_,7 @@
4957

5058
@Override

paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryChiseledBookshelf.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,11 @@
33
import net.minecraft.world.level.block.entity.ChiseledBookShelfBlockEntity;
44
import org.bukkit.block.ChiseledBookshelf;
55
import org.bukkit.inventory.ChiseledBookshelfInventory;
6-
import org.bukkit.inventory.ItemStack;
76

87
public class CraftInventoryChiseledBookshelf extends CraftInventory implements ChiseledBookshelfInventory {
98

109
public CraftInventoryChiseledBookshelf(ChiseledBookShelfBlockEntity inventory) {
1110
super(inventory);
12-
13-
}
14-
15-
@Override
16-
public void setItem(int index, ItemStack item) {
17-
net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item);
18-
19-
if (nms.isEmpty()) {
20-
this.getInventory().removeItemNoUpdate(index);
21-
} else {
22-
this.getInventory().setItem(index, nms);
23-
}
2411
}
2512

2613
@Override

paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryJukebox.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
package org.bukkit.craftbukkit.inventory;
22

3-
import net.minecraft.world.Container;
3+
import net.minecraft.world.level.block.entity.JukeboxBlockEntity;
44
import org.bukkit.block.Jukebox;
55
import org.bukkit.inventory.ItemStack;
66
import org.bukkit.inventory.JukeboxInventory;
77

88
public class CraftInventoryJukebox extends CraftInventory implements JukeboxInventory {
99

10-
public CraftInventoryJukebox(Container inventory) {
10+
public CraftInventoryJukebox(JukeboxBlockEntity inventory) {
1111
super(inventory);
1212
}
1313

1414
@Override
1515
public void setRecord(ItemStack item) {
16-
if (item == null) {
17-
this.inventory.removeItem(0, 0);
18-
} else {
19-
this.setItem(0, item);
20-
}
16+
this.setItem(0, item);
2117
}
2218

2319
@Override

paper-server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryShelf.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import net.minecraft.world.level.block.entity.ShelfBlockEntity;
44
import org.bukkit.block.Shelf;
5-
import org.bukkit.inventory.ItemStack;
65
import org.bukkit.inventory.ShelfInventory;
76

87
public class CraftInventoryShelf extends CraftInventory implements ShelfInventory {
@@ -11,17 +10,6 @@ public CraftInventoryShelf(ShelfBlockEntity inventory) {
1110
super(inventory);
1211
}
1312

14-
@Override
15-
public void setItem(int index, ItemStack item) {
16-
net.minecraft.world.item.ItemStack nms = CraftItemStack.asNMSCopy(item);
17-
18-
if (nms.isEmpty()) {
19-
this.getInventory().removeItemNoUpdate(index);
20-
} else {
21-
this.getInventory().setItem(index, nms);
22-
}
23-
}
24-
2513
@Override
2614
public Shelf getHolder() {
2715
return (Shelf) this.inventory.getOwner();

0 commit comments

Comments
 (0)