Craftable Infinite Shulker Box

Quick rating

Community listing page, reviews here may not be monitored by the author.

Craftable Infinite Shulker Box

No reviews yet

A simple mod that lets you place an infinite number of Shulker Boxes inside a Shulker Box

Mod Loaders
Minecraft

About

Description

Craftable Infinite Shulker Box

A lightweight Minecraft Forge mod that:

  • allows every vanilla shulker box (undyed and all 16 colors) to be placed inside another shulker box;
  • applies the same behavior to sided inventory insertion used by automation such as hoppers; and
  • adds a shaped recipe for one undyed shulker box made from nine chests.

The implementation deliberately relies on vanilla inventory/NBT handling. It adds no custom item, block, capability, packet, or persistent data format.

Supported versions

A separate JAR is published for each supported Minecraft version. Use the JAR that matches your Minecraft version; they are not interchangeable.

Minecraft Forge Java JAR
1.18.2 40.3.12 17 craftable_infinite_shulker_box-mc1.18.2-<version>.jar
1.19.2 43.5.2 17 craftable_infinite_shulker_box-mc1.19.2-<version>.jar
1.19.4 45.4.3 17 craftable_infinite_shulker_box-mc1.19.4-<version>.jar
1.20.1 47.4.23 17 craftable_infinite_shulker_box-mc1.20.1-<version>.jar
1.21.1 52.1.16 21 craftable_infinite_shulker_box-mc1.21.1-<version>.jar

Each JAR accepts any Forge release in its major version line (for example Forge 47 for 1.20.1), and itsย mods.tomlย restricts it to its own Minecraft version so the wrong JAR fails fast with a clear message instead of misbehaving.

Install the JAR in theย modsย directory on both the client and server. Installing it on both sides is recommended because GUI validation occurs on both sides and automation is server-side.

Recipe

Fill every slot of a crafting table with oneย minecraft:chestย (nine chests total) to craft oneย minecraft:shulker_box. The recipe unlocks when a player obtains a chest.

Build

Build every supported version at once:

./gradlew build
ย 

Collect all JARs into a single directory (build/libs):

./gradlew collectJars
ย 

Build only one version:

./gradlew :versions:1.20.1:build
ย 

Each version's JAR is written toย versions/<mc_version>/build/libs/.

IDE run configurations are generated per version, for exampleย ./gradlew :versions:1.20.1:genIntellijRunsย orย :versions:1.20.1:genEclipseRuns.

Building on a low-memory machine

ForgeGradle forks external JVMs (Access Transformer, renamer, decompiler) that doย notย inheritย org.gradle.jvmargs. On a machine with little RAM those forks can die withย OutOfMemoryError, which leaves a truncated JAR in the ForgeGradle cache and produces a confusing "Could not find net.minecraftforge:forge:..." error on the next run. Give the forked JVMs their own heap:

JAVA_TOOL_OPTIONS=-Xmx1600m ./gradlew build
ย 

If a build already failed this way, delete the affected cache entry (~/.gradle/caches/forge_gradle/minecraft_user_repo/net/minecraftforge/forge/<version>_mapped_*) before retrying.

Project layout

common/                  Java sources + Mixin config shared by every version
gradle/forge-mod.gradle  the ForgeGradle build logic shared by every version
versions/<mc_version>/   per-version gradle.properties + data-pack resources
ย 

The Java code is shared: both Mixin targets (ShulkerBoxSlot.mayPlaceย andย ShulkerBoxBlockEntity.canPlaceItemThroughFace) have identical signatures in all supported Minecraft versions, so only build settings and data-pack resources differ.

Implementation notes

  • ShulkerBoxSlotMixinย permits vanilla shulker-box items in the shulker GUI.
  • ShulkerBoxBlockEntityMixinย permits them through sided inventory insertion.
  • The recipe and recipe-unlock advancement are ordinary data-pack JSON resources.
  • Mixins only intercept the vanilla shulker-box rejection case; behavior for other items remains untouched.

What differs between versions

These are the version-specific details the per-version resources handle:

  • Data pack format: 9 (1.18.2), 10 (1.19.2), 12 (1.19.4), 15 (1.20.1), 48 (1.21.1).
  • Data folder names: 1.21 renamed the folders to singular, so 1.21.1 usesย data/<namespace>/recipe/ย andย advancement/ย while older versions useย recipes/ย andย advancements/.
  • Recipe result: 1.21.1 usesย "result": {"id": ..., "count": ...}; earlier versions useย "result": {"item": ..., "count": ...}.
  • Recipe metadata:ย categoryย andย show_notificationย only exist from 1.19.4 on, so the 1.18.2 and 1.19.2 recipes omit them. The only valid crafting categories areย building,ย redstone,ย equipmentย andย misc.
  • Advancement item predicate: 1.21.1 takes an ID/tag string ("items": "minecraft:chest"); earlier versions take a list.
  • Java / Mixin: 1.20.5+ ships Java 21, and Mixin 0.8.5 has noย JAVA_21ย compatibility level, so 1.21.1 uses the Mixin 0.8.7 that Forge 52 bundles.
  • Reobfuscation: pre-1.20.5 runs on Searge names, so those JARs are reobfuscated and ship a refmap. 1.20.5+ runs on the same official mappings used at compile time, so 1.21.1 is neither reobfuscated nor ships a refmap.

Manual verification

Repeat for each version you intend to ship:

  1. Obtain a chest and confirm the recipe appears in the recipe book.
  2. Fill a 3x3 crafting grid with chests and craft the undyed shulker box.
  3. Insert undyed and colored shulker boxes through the shulker GUI.
  4. Create at least three nesting levels, then place, break, and reopen each box to verify contents persist.
  5. Use a hopper to insert a shulker box into a placed shulker box.

ๅˆฉ็”จ่ฆ็ด„ใƒปใƒฉใ‚คใ‚ปใƒณใ‚น

ๆœฌModใซ็‰นๅฎšใฎใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใƒฉใ‚คใ‚ปใƒณใ‚น๏ผˆMIT็ญ‰๏ผ‰ใฏ่จญๅฎšใ—ใฆใŠใ‚Šใพใ›ใ‚“ใ€‚

  • ใ‚ฒใƒผใƒ ใƒ—ใƒฌใ‚คใƒปๅ‹•็”ปใƒป้…ไฟก็ญ‰ใงใฎๅˆฉ็”จ: ่‡ช็”ฑใซใ”ๅˆฉ็”จใ„ใŸใ ใ‘ใพใ™ใ€‚
  • ๆ”นๅค‰ใƒปไบŒๆฌก้…ๅธƒใƒปModpackๅŒๆขฑใƒปใ‚ณใƒผใƒ‰ๆต็”จ:ย ๅฟ…ใšไบ‹ๅ‰ใซไธ€่จ€ใŠๅฃฐใŒใ‘ใƒปใ”้€ฃ็ตก๏ผˆGitHub Issue็ญ‰๏ผ‰ใ‚’ใ„ใŸใ ใ‘ใ‚Œใฐๆ”นๅค‰ใƒปๅˆฉ็”จๅฏ่ƒฝใงใ™ใ€‚
  • ็ฆๆญขไบ‹้ …: ็„กๆ–ญใงใฎๆ”นๅค‰ใƒป็„กๆ–ญๅ†้…ๅธƒใƒป่ปข่ผ‰ใƒป่‡ชไฝœ็™บ่จ€ใƒป่ฒฉๅฃฒใฏ็ฆๆญขใ„ใŸใ—ใพใ™ใ€‚