java - Minecraft Forge - Loop 不断覆盖自己
问题描述
如果这是一个过于简单的问题,我深表歉意。
我正在制作一个包含 26 种技能的 rpg 模组,所有技能的 id 都从 0 到 25。我正在尝试使用 for 循环从这些技能中保存数据,但它会不断覆盖自己,我不确定为什么或如何。
@Override
public CompoundNBT serializeNBT() {
CompoundNBT data = new CompoundNBT();
for(int i = 0; i < 26; i++) {
data.putInt("xp", (int) (xp[i] * 10));
data.putInt("dynamic", dynamicLevels[i]);
data.putInt("static", staticLevels[i]);
}
return data;
}
解决方案
正如评论中已经提到的,您应该为放入数据结构中的 int 值使用唯一键。
键值数据结构(在您的情况下很可能CompoundNBT
就是那个)通常只将一个值引用到一个键。因此,您应该为 xp 存储 26 个密钥,为动态存储 26 个,为静态存储 26 个。
您可以像这样重写代码:
@Override
public CompoundNBT serializeNBT() {
CompoundNBT data = new CompoundNBT();
for(int i = 0; i < 26; i++) {
data.putInt("xp_"+i, (int) (xp[i] * 10));
data.putInt("dynamic_"+i, dynamicLevels[i]);
data.putInt("static_"+i, staticLevels[i]);
}
return data;
}
但是,我认为您应该使用类似的东西
// Remember to fix base method too
@Override
public ArrayList<CompoundNBT> serializeNBT() {
ArrayList<CompoundNBT> out = new ArrayList<>();
for(int i = 0; i < 26; i++) {
CompoundNBT data = new CompoundNBT();
data.putInt("xp", (int) (xp[i] * 10));
data.putInt("dynamic", dynamicLevels[i]);
data.putInt("static", staticLevels[i]);
out.add(data);
}
return out;
}
这将给出“技能”列表,每个都有其价值
推荐阅读
- flutter - 我在运行我的颤振应用程序时遇到错误
- html - 当元标记告诉更多关于文件的信息时,为什么我们使用 lang 属性作为 html 属性?
- java - android java sqlite中的空指针异常
- java - android中glide的缓存时间段
- javascript - FormData 到对象的格式与节点 bodyparser 相同
- wordpress - 无法在 Elementor 中创建标题
- sql - Oracle SQL query to pivot like excel
- javascript - How to display the quantity based on the size
- optimization - How to handle equalities in optimization using ROI_solve and the alabama solver
- java - Basic Java Fundamentals