WanionLib

[!INFO] Git Commit: 3c44ca5 | Updated: 2026-04-27

GTNH 1.7.10 的纯代码库 mod(作者 WanionCane,modid wanionlib,@Mod 类 wanion.lib.WanionLib,根包 wanion.lib,MPL-2.0)。mcmod.info 描述为 “Shared Code Library Used by (not)all WanionCane mods!”,描述里也点明它不面向玩家。

全仓库 23 个 Java 文件、约 1094 行,注册 0 个方块、0 个物品、0 个实体。 它的全部内容就是供其它 mod compileOnly 依赖后调用的 API:多线程加载框架、懒加载依赖容器、物品 meta 键编码、配方辅助、客户端序列帧动画。玩家在游戏里看不到任何 WanionLib 内容物。

构建信息

属性 值
Minecraft 1.7.10
Forge 10.13.4.1614
兼容声明 acceptedMinecraftVersions = "[1.7.10]"(Reference.ACCEPTED_MINECRAFT)
版本来源 Reference.MOD_VERSION = "GRADLETOKEN_VERSION",构建期由 Gradle 替换
构建插件 com.gtnewhorizons.gtnhconvention / gtnhsettingsconvention 2.0.24
硬依赖 无(mcmod.info 的 "dependencies": [])
编译期依赖 CraftTweaker 3.4.6、ZenScript 1.0.1-GTNH(均 compileOnly + transitive = false)
资源文件 仅 src/main/resources/mcmod.info 与 WanionLib.png(logo)

API 面总览(23 个类)

包 类 职责
wanion.lib WanionLib @Mod 主类,@Mod.Instance 单例,logger 与依赖容器入口
wanion.lib Reference 常量(MOD_ID / MOD_NAME / MOD_VERSION / ACCEPTED_MINECRAFT)
wanion.lib.common Dependencies<D> 按类身份的懒加载单例容器(IdentityHashMap)
wanion.lib.common IRemovable removed() / setRemoved(boolean) 软删除标记接口
wanion.lib.common Instantiator<I> 函数式接口,反射实例化替代方案
wanion.lib.common MetaItem ItemStack ↔ int 物品键编码 + 集合化
wanion.lib.common FixedSizeList<E> 容量固定的 ArrayList 替身,满时 add 返回 false
wanion.lib.common Util 反射读写字段、getModName(ItemStack)
wanion.lib.common MineTweakerHelper CraftTweaker IItemStack / IOreDictEntry → MC 对象
wanion.lib.module LoadStage 加载阶段枚举,4 值,对应 FML 事件类
wanion.lib.module SpecifiedLoadStage @SpecifiedLoadStage 运行时注解,指定线程类阶段
wanion.lib.module AbstractModule 模块基类 + Manager 嵌套类(EnumMap 分组)
wanion.lib.module AbstractModuleThread Callable<String> 任务基类
wanion.lib.module ModuleHandler 按 FML 阶段调度所有模块
wanion.lib.recipe RecipeHelper 物品数组 → Forge IRecipe 形状数组
wanion.lib.recipe.advanced IAdvancedRecipe 高级配方接口(继承 IRemovable)
wanion.lib.recipe.advanced AbstractRecipeRegistry<R> 按 short 键分桶的运行时配方匹配器
wanion.lib.client ClientTickHandler 客户端 tick 驱动所有动画
wanion.lib.client.animation Animation 序列帧动画基类
wanion.lib.client.animation SimpleAnimation 顺序逐帧
wanion.lib.client.animation SimpleHalfAnimation 隔帧半速
wanion.lib.client.animation ComplexAnimation 按 int[] 阶段表跳帧
wanion.lib.client.animation ComplexHalfAnimation 阶段表 + 半速

游戏设定 / API 表面

本 mod 唯一的「设定」维度就是它对外暴露的 API。7 个分组条目:

  • 主类入口与依赖注入 - @Mod 主类 WanionLib、常量类 Reference、懒加载容器 Dependencies<D> 与 DependenceWatcher、函数式接口 Instantiator、软删除接口 IRemovable(7 类)
  • 模块系统 - 并行加载框架:LoadStage(4 值枚举)、@SpecifiedLoadStage、AbstractModule + Manager、AbstractModuleThread、ModuleHandler(6 类)
  • MetaItem 物品键编码 - ItemStack ↔ int 键的位布局(低 16 位 id / 第 16 位标志 / 高位 damage + 1),及 7 个集合化与统计方法
  • 配方形状转换 - RecipeHelper 三个 rawShapeToShape 重载(键字符由 int f = 1 经 (char) f++ 发出),含一维/二维的截断行为差异
  • 高级配方注册表 - IAdvancedRecipe 接口 + AbstractRecipeRegistry<R>,recipeKey = recipeSize | (width << 8) | (height << 12)
  • 客户端动画 API - Animation 基类 + 4 个变体(SimpleAnimation / SimpleHalfAnimation / ComplexAnimation / ComplexHalfAnimation)+ ClientTickHandler
  • 工具类 - Util(反射 + getModName)、FixedSizeList<E>、MineTweakerHelper(CraftTweaker 桥接)

配置

本 mod 不写任何配置文件。 全仓库零 Configuration / @Config / ForgeConfig / getConfig 匹配,因此没有 .cfg 落盘,也没有任何可调参数。所有行为改变都靠消费方传入的构造参数(如 Animation 的帧数组、ComplexAnimation 的阶段表、AbstractModule 的 Instantiator)。

唯一的「可配置项」是常量类 Reference 的 4 个编译期常量。

事件处理

本 mod 不声明任何自定义事件类,也没有自己的事件总线。全仓库仅 3 处事件回调:

位置 注解 事件类型 总线 行为
WanionLib.preInit @Mod.EventHandler FMLPreInitializationEvent FML logger = event.getModLog();
WanionLib.loadComplete @Mod.EventHandler FMLLoadCompleteEvent FML dependencies = null;
ClientTickHandler.tickEvent @SubscribeEvent TickEvent.ClientTickEvent FMLCommonHandler.instance().bus() 遍历 registeredAnimations 调 updateAnimation()

三者都是 vanilla FML 事件的被动监听器,没有取消语义、不设优先级、不修改事件状态。

本 mod 没有 X(grep 证据)

以下维度经全仓库检索确认零内容,因此未建立对应目录:

缺失维度 检索式 结果
方块 registerBlock、extends Block、setHardness 0 命中
多方块结构 Multiblock、Controller、Formation 0 命中
物品 registerItem、extends Item、maxStackSize 0 命中
TileEntity registerTileEntity、extends TileEntity 0 命中
实体 registerModEntity、EntityRegistry、extends Entity* 0 命中
容器 / GUI Container、IGuiHandler、GuiScreen、IInventory 0 命中
附魔 Enchantment 0 命中
Buff / Debuff Potion、PotionEffect 0 命中
群系 BiomeGen、Biome 0 命中
结构 / 世界生成 WorldGen、ChunkProvider、MapGen、IWorldGenerator 0 命中
成就 Achievement 0 命中
维度 / WorldProvider registerDimension、registerWorldProvider、extends WorldProvider 0 命中
热键 KeyBinding、registerKeyBinding 0 命中
指令 ICommand、CommandBase、addChatCommand、ClientCommandHandler 0 命中
能力系统 Capability、ICapability 0 命中
NBT 序列化 NBTTagCompound、writeToNBT、readFromNBT、getCompoundTag 0 命中
配方注册 GameRegistry.register、addCraftingRecipe、IRecipe 实现类 0 命中
网络封包 SimpleNetworkWrapper、IMessage 0 命中
NEI / REI / JEI nei/、rei/、jei/、SimpleServiceLocator 0 命中

补充说明:

  • 没有物品 / 配方:MetaItem 与 RecipeHelper 看起来像物品与配方入口,但它们只做数据转换,不注册任何内容 —— 前者把已有的 ItemStack 压成 int,后者把调用方给的数组重排成 Forge 形状数组。库内没有任何 Item、Block 子类,也没有任何 GameRegistry.register* 调用。
  • 没有能力系统:Dependencies<D> 名字像 capability,但它是纯 JVM 内的懒加载单例容器(IdentityHashMap),与 Minecraft 的 ICapability 无关,不写 NBT、不随存档持久化。
  • 没有 NBT:IAdvancedRecipe 的 getRecipeKey() / getRecipeSize() 是运行期 short 索引(recipeSize | (width << 8) | (height << 12)),不是持久化键。
  • 没有容器:AbstractRecipeRegistry.findMatchingRecipe(InventoryCrafting) 只读取传入的 InventoryCrafting(调 getSizeInventory() 与 getStackInSlot(int)),自己不实现 Container、不注册 GUI ID。
  • 没有能力 / 事件总线:ClientTickHandler 是库内唯一的 WanionLib.IDependency 实现,仅用于客户端动画驱动。
  • 未使用的能力:ModuleHandler 在库内除自身定义外零引用 —— WanionLib 不会自动接线它,由引用本库的 mod 在自己的 @Mod 事件回调里手工 addModule + startModules。同理 Dependencies.subscribe(...) / DependenceWatcher 在库内也无人使用。

相关条目