可合成无限潜影盒

可合成无限潜影盒

一个简单的模组,允许你在潜影盒内无限放置潜影盒

可合成的无限潜影盒

一个轻量级的 Minecraft Forge 模组,提供以下功能:

  • 允许将每种原版潜影盒(未染色及全部 16 种颜色)放入另一个潜影盒中;
  • 对漏斗等自动化设备使用的侧面物品输送同样适用此行为;
  • 新增一个使用九个箱子合成一个未染色潜影盒的有序配方。

该实现刻意依赖原版的物品/NBT处理方式。它不添加任何自定义物品、方块、能力(Capability)、数据包或持久化数据格式。

支持的版本

每个受支持的 Minecraft 版本均发布独立的 JAR 文件。请使用与您的 Minecraft 版本匹配的 JAR;它们之间不可互换。

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

每个 JAR 接受其主版本线中的任何 Forge 版本(例如,1.20.1 对应 Forge 47),其 mods.toml 将自身限制在相应的 Minecraft 版本内,因此错误的 JAR 会快速失败并显示清晰的消息,而不会产生异常行为。

将 JAR 安装到客户端和服务端的 mods 目录中。建议同时在两端安装,因为 GUI 验证在两端都会执行,而自动化逻辑在服务端运行。

合成配方

用 minecraft:chest(共九个箱子)填满合成台的每个格子,即可合成一个 minecraft:shulker_box(潜影盒)。当玩家获得箱子时,该配方随之解锁。

构建

一次性构建所有支持的版本:

./gradlew build

将所有 JAR 收集到单个目录(build/libs)中:

./gradlew collectJars

仅构建一个版本:

./gradlew :versions:1.20.1:build

每个版本的 JAR 都会写入 versions/<mc_version>/build/libs/ 目录。

IDE 运行配置会按版本生成,例如 ./gradlew :versions:1.20.1:genIntellijRuns 或 :versions:1.20.1:genEclipseRuns。

在低内存机器上构建

ForgeGradle 会派生外部 JVM(Access Transformer、renamer、decompiler),这些 JVM 不会继承 org.gradle.jvmargs 设置。在内存较小的机器上,这些派生进程可能会因 OutOfMemoryError 而终止,这会在 ForgeGradle 缓存中留下截断的 JAR,并在下次运行时产生令人困惑的 "Could not find net.minecraftforge:forge:..." 错误。为这些派生的 JVM 分配独立的堆内存:

JAVA_TOOL_OPTIONS=-Xmx1600m ./gradlew build

如果构建已因上述原因失败,请在重试前删除受影响的缓存条目(~/.gradle/caches/forge_gradle/minecraft_user_repo/net/minecraftforge/forge/<version>_mapped_*)。

项目结构

common/                  Java 源码 + 所有版本共享的 Mixin 配置
gradle/forge-mod.gradle  所有版本共享的 ForgeGradle 构建逻辑
versions/<mc_version>/   各版本独立的 gradle.properties + 数据包资源

Java 代码是共享的:两个 Mixin 目标(ShulkerBoxSlot.mayPlace 和 ShulkerBoxBlockEntity.canPlaceItemThroughFace)在支持的所有 Minecraft 版本中具有相同的签名,因此只有构建设置和数据包资源有所不同。

实现说明

  • ShulkerBoxSlotMixin 允许在潜影盒 GUI 中放入原版潜影盒物品。
  • ShulkerBoxBlockEntityMixin 允许通过侧面物品输送放入潜影盒。
  • 配方和配方解锁进度是普通的数据包 JSON 资源。
  • Mixin 仅拦截原版潜影盒拒绝放入的情况;其他物品的行为不受影响。

不同版本间的差异

以下是按版本区分的资源需要处理的版本特定细节:

  • 数据包格式:9(1.18.2)、10(1.19.2)、12(1.19.4)、15(1.20.1)、48(1.21.1)。
  • 数据文件夹名称:1.21 将文件夹重命名为单数形式,因此 1.21.1 使用 data/<namespace>/recipe/ 和 advancement/,而旧版本使用 recipes/ 和 advancements/。
  • 配方结果:1.21.1 使用 "result": {"id": ..., "count": ...};较早版本使用 "result": {"item": ..., "count": ...}。
  • 配方元数据:category 和 show_notification 从 1.19.4 起才存在,因此 1.18.2 和 1.19.2 的配方省略了它们。唯一有效的合成类别是 building、redstone、equipment 和 misc。
  • 进度物品谓词:1.21.1 接受 ID/标签字符串("items": "minecraft:chest");较早版本接受列表。
  • Java / Mixin:1.20.5+ 使用 Java 21,而 Mixin 0.8.5 没有 JAVA_21 兼容级别,因此 1.21.1 使用 Forge 52 捆绑的 Mixin 0.8.7。
  • 重新混淆(Reobfuscation):1.20.5 之前的版本在 Searge 名称上运行,因此这些 JAR 被重新混淆并附带 refmap。1.20.5+ 使用与编译时相同的官方映射,因此 1.21.1 既未重新混淆,也不附带 refmap。

手动验证

对您打算发布的每个版本重复以下步骤:

  1. 获得一个箱子并确认配方出现在配方书中。
  2. 用箱子填满 3x3 合成格,合成未染色的潜影盒。
  3. 通过潜影盒 GUI 放入未染色和染色的潜影盒。
  4. 创建至少三层的嵌套结构,然后放置、破坏并重新打开每个盒子,验证内容物是否持久保存。
  5. 使用漏斗将一个潜影盒放入已放置的潜影盒中。

利用規約・ライセンス

本Modには特定のオープンソースライセンス(MIT等)は設定しておりません。

  • ゲームプレイ・動画・配信等での利用: 自由にご利用いただけます。
  • 改変・二次配布・Modpack同梱・コード流用: 必ず事前に一言お声がけ・ご連絡(GitHub Issue等)をいただければ改変・利用可能です。
  • 禁止事項: 無断での改変・無断再配布・転載・自作発言・販売は禁止いたします。