Skip to content

Commit bb6cf81

Browse files
authored
Fix container tooltip and saving (FabricMC#537)
1 parent a6e4513 commit bb6cf81

File tree

4 files changed

+28
-10
lines changed

4 files changed

+28
-10
lines changed

develop/blocks/container-menus.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
title: Container Menus
33
description: A guide explaining how to create a simple menu for a container block.
44
authors:
5+
- CelDaemon
56
- Tenneb22
67
---
78

@@ -28,12 +29,6 @@ First, we want to create a block and block entity; read more in the [Block Conta
2829

2930
@[code transcludeWith=:::be](@/reference/latest/src/main/java/com/example/docs/block/entity/custom/DirtChestBlockEntity.java)
3031

31-
::: info
32-
33-
As we want a 3x3 container, we need to set the size of items to 9.
34-
35-
:::
36-
3732
### Opening the Menu {#opening-the-screen}
3833

3934
We want to be able to open the menu somehow, so we will handle that within the `useWithoutItem` method:

reference/latest/src/client/java/com/example/docs/rendering/screens/inventory/DirtChestScreen.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,13 @@ protected void renderBg(GuiGraphics graphics, float delta, int mouseX, int mouse
3131
int yo = (this.height - this.imageHeight) / 2;
3232
graphics.blit(RenderPipelines.GUI_TEXTURED, CONTAINER_TEXTURE, xo, yo, 0.0F, 0.0F, this.imageWidth, this.imageHeight, BACKGROUND_TEXTURE_WIDTH, BACKGROUND_TEXTURE_HEIGHT);
3333
}
34+
35+
@Override
36+
public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
37+
super.render(graphics, mouseX, mouseY, delta);
38+
39+
// Render item tooltips
40+
this.renderTooltip(graphics, mouseX, mouseY);
41+
}
3442
}
3543
// :::screen

reference/latest/src/main/java/com/example/docs/block/entity/custom/DirtChestBlockEntity.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
import net.minecraft.core.BlockPos;
77
import net.minecraft.core.NonNullList;
88
import net.minecraft.network.chat.Component;
9+
import net.minecraft.world.ContainerHelper;
910
import net.minecraft.world.MenuProvider;
1011
import net.minecraft.world.entity.player.Inventory;
1112
import net.minecraft.world.entity.player.Player;
1213
import net.minecraft.world.inventory.AbstractContainerMenu;
1314
import net.minecraft.world.item.ItemStack;
1415
import net.minecraft.world.level.block.entity.BlockEntity;
1516
import net.minecraft.world.level.block.state.BlockState;
17+
import net.minecraft.world.level.storage.ValueInput;
18+
import net.minecraft.world.level.storage.ValueOutput;
1619

1720
import com.example.docs.block.entity.ModBlockEntities;
1821
import com.example.docs.container.ImplementedContainer;
@@ -29,7 +32,7 @@ public class DirtChestBlockEntity extends BlockEntity implements ImplementedCont
2932
// :::menu
3033

3134
// :::be
32-
private static final int CONTAINER_SIZE = 9;
35+
public static final int CONTAINER_SIZE = 3 * 3;
3336
private final NonNullList<ItemStack> items = NonNullList.withSize(CONTAINER_SIZE, ItemStack.EMPTY);
3437

3538
// ...
@@ -48,6 +51,18 @@ public NonNullList<ItemStack> getItems() {
4851
return items;
4952
}
5053

54+
@Override
55+
protected void saveAdditional(ValueOutput valueOutput) {
56+
super.saveAdditional(valueOutput);
57+
ContainerHelper.saveAllItems(valueOutput, items);
58+
}
59+
60+
@Override
61+
protected void loadAdditional(ValueInput valueInput) {
62+
super.loadAdditional(valueInput);
63+
ContainerHelper.loadAllItems(valueInput, items);
64+
}
65+
5166
// :::menu
5267
@Override
5368
@NonNull

reference/latest/src/main/java/com/example/docs/menu/custom/DirtChestMenu.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,22 @@
88
import net.minecraft.world.inventory.Slot;
99
import net.minecraft.world.item.ItemStack;
1010

11+
import com.example.docs.block.entity.custom.DirtChestBlockEntity;
1112
import com.example.docs.menu.ModMenuType;
1213

1314
// :::menu
1415
public class DirtChestMenu extends AbstractContainerMenu {
15-
private static final int CONTAINER_SIZE = 9;
1616
private final Container container;
1717

1818
// Client-side constructor
1919
public DirtChestMenu(final int containerId, final Inventory inventory) {
20-
this(containerId, inventory, new SimpleContainer(CONTAINER_SIZE));
20+
this(containerId, inventory, new SimpleContainer(DirtChestBlockEntity.CONTAINER_SIZE));
2121
}
2222

2323
// Server-side constructor
2424
public DirtChestMenu(final int containerId, final Inventory inventory, final Container container) {
2525
super(ModMenuType.DIRT_CHEST, containerId);
26-
checkContainerSize(container, CONTAINER_SIZE);
26+
checkContainerSize(container, DirtChestBlockEntity.CONTAINER_SIZE);
2727
this.container = container;
2828

2929
// Some containers do custom logic when opened by a player.

0 commit comments

Comments
 (0)