promotional bannermobile promotional banner

Vault Drawers

Port of Storage Drawers to Minecraft 26.2 / NeoForge 26.2.0.57. Interactive compartment storage blocks that display their contents, with capacity, void and speed upgrades, plus a controller network to manage entire storage walls from a single block.
Back to Files

Vault Drawers (0.0.0-beta.9)

File namevault_drawers-26.2-neoforge-26.2.0.57-0.0.0-beta.9.jar
Uploader
LlaGuiT0LlaGuiT0
Uploaded
Aug 31, 2026
Downloads
8
Size
1.0 MB
Mod Loaders
NeoForge
File ID
8777684
Type
B
Beta
Supported game versions
  • 26.2

Curse Maven Snippet

NeoForge

implementation "curse.maven:vault-drawers-1668019:8777684"

Learn more about Curse Maven

What's new

v0.0.0-beta.9 - Drawers accept and dispense items again

Fixed

  • Crash placing 3-slot compacting drawers: BlockEntityDrawersComp.create(slotCount) and BlockEntityDrawersStandard.create(slotCount) ignored the slotCount argument and always returned the 2-slot BlockEntityType (FRACTIONAL_DRAWERS_2 / STANDARD_DRAWERS_1). Placing a compacting_drawers_3 (or a 2/4-slot standard drawer) produced a block entity that did not match the block and BlockEntity.validateBlockState threw IllegalStateException. Each factory now picks the correct BlockEntityType for its slotCount.
  • Drawers would not accept or dispense items: the interaction layer of BlockDrawers and BlockEntityDrawers was unported (useSlot/useSlotInvertible/putSlot/takeSlot returned PASS, interactPutItemsIntoSlot was empty, takeItemsFromSlot returned empty). Ported from upstream Storage Drawers: insert (right-click = 1, double-click = dump matching inventory), extract (left-click = 1, alt action = full stack), open the upgrade UI with Shift + empty hand, setPlacedBy portable-data read, drops, and detached-drawer pull/return (drawer_puller / detached drawer).
  • "Stack Limit: 0" — storage capacity was zero: the block entities' inner data classes (GroupData / DrawerData) had lost their overrides. StandardDrawerGroup.DrawerData.getStackCapacity() and FractionalDrawerGroup.getStackCapacity() return 0 in the base class and the block-entity subclasses must supply the real value. Restored: getStackCapacity (getStorageMultiplier() × getEffectiveDrawerCapacity()), onItemChanged / onAmountChanged (persistence and client count sync), getWorld on compacting drawers (updates the SLOTS block state), and injectPortableData(group) in both constructors (contents were not being saved). Removed two incorrect getDrawerCapacity() overrides that recursed to 0; the parent implementation based on getStorageUnits() is used instead. Added BlockEntityDrawers.syncClientCount.

Technical Changes

  • 1.21 → 26.2 API adaptations in the ported methods: Level.isClientSideisClientSide(), Level.randomgetRandom(), Inventory.selectedgetSelectedSlot(), Player.displayClientMessage(Component, boolean)sendSystemMessage(Component), DataComponents.BLOCK_ENTITY_DATA is now TypedEntityData<> (not CustomData) → getUnsafe(), inner class ContentProvider instantiated via be.new ContentProvider(...).
  • Block#onRemove does not exist in 26.2: the method added during the port was removed; DROP-mode content drops and KEEP-mode BLOCK_ENTITY_DATA preservation are left as a TODO to port with BlockEntity#preRemoveSideEffects.

Known Gaps (not yet ported)

  • Rendering of the stored item on the drawer face (BlockEntityDrawersRenderer) and its client registration.
  • Drawer Controller logic (BlockEntityController): block scanning and inventory aggregation.

JAR: vault_drawers-26.2-neoforge-26.2.0.57-0.0.0-beta.9.jar

Tag: 26.2-neoforge-beta.9

This mod has no additional files