AspectList
基本信息
| 项目 |
值 |
| 来源 |
thaumcraft.api.aspects.AspectList |
| 包 |
thaumcraft.api.aspects |
| 继承 |
Serializable |
概述
AspectList 是一个用于存储元素(Aspect)及其数量的容器类。它实现了 Serializable 接口,可以序列化和反序列化到 NBT。
内部使用 LinkedHashMap<Aspect, Integer> 存储元素集合。
构造函数
| 构造函数 |
说明 |
AspectList() |
创建一个空的元素列表 |
AspectList(ItemStack stack) |
根据物品栈的元素信息创建列表 |
核心方法
元素查询
| 方法 |
返回值 |
说明 |
getAspects() |
Aspect[] |
获取所有元素数组 |
getPrimalAspects() |
Aspect[] |
仅获取基础元素 |
getAspectsSorted() |
Aspect[] |
按名称排序的元素数组 |
getAspectsSortedAmount() |
Aspect[] |
按数量排序的元素数组 |
getAmount(Aspect key) |
int |
获取指定元素的数量 |
元素操作
| 方法 |
返回值 |
说明 |
add(Aspect aspect, int amount) |
AspectList |
添加元素(累加数量) |
merge(Aspect aspect, int amount) |
AspectList |
添加元素(取最大值) |
add(AspectList in) |
AspectList |
合并另一个列表(累加) |
merge(AspectList in) |
AspectList |
合并另一个列表(取大) |
reduce(Aspect key, int amount) |
boolean |
减少元素数量 |
remove(Aspect key, int amount) |
AspectList |
移除指定数量,为0则删除 |
remove(Aspect key) |
AspectList |
完全移除该元素 |
统计方法
| 方法 |
返回值 |
说明 |
size() |
int |
不同元素种类的数量 |
visSize() |
int |
所有元素的总数量 |
序列化方法
| 方法 |
说明 |
readFromNBT(NBTTagCompound) |
从 NBT 读取(使用 “Aspects” 标签) |
readFromNBT(NBTTagCompound, String label) |
从 NBT 读取(使用指定标签) |
writeToNBT(NBTTagCompound) |
写入 NBT(使用 “Aspects” 标签) |
writeToNBT(NBTTagCompound, String label) |
写入 NBT(使用指定标签) |
其他
| 方法 |
返回值 |
说明 |
copy() |
AspectList |
深拷贝列表 |
NBT 存储格式
元素以 NBT List 格式存储,每个元素是一个 Compound:
Aspects: [
{ key: "aer", amount: 10 },
{ key: "ignis", amount: 5 }
]
代码示例
// 创建并添加元素
AspectList aspects = new AspectList();
aspects.add(Aspect.AIR, 10);
aspects.add(Aspect.FIRE, 5);
// 合并列表
AspectList other = new AspectList();
other.add(Aspect.AIR, 3);
aspects.merge(other); // AIR 变为 10 和 3 的最大值 = 10
// 序列化到 NBT
NBTTagCompound nbt = new NBTTagCompound();
aspects.writeToNBT(nbt);
// 从 NBT 读取
AspectList loaded = new AspectList();
loaded.readFromNBT(nbt);
与 IAspectContainer 的区别
AspectList 是纯数据容器,用于存储元素集合
IAspectContainer 是接口,定义方块实体如何与元素交互
INode 等继承自 IAspectContainer 的类也可以转换为 AspectList。