Minecraft Forge - Loop 不断覆盖自己
Minecraft Forge - Loop keeps overwriting itself
如果这个问题过于简单,我深表歉意。
我正在制作一个 rpg mod,其中包含 26 种技能,所有技能的 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;
}
这将给出“技能”列表,每个技能都有其价值
如果这个问题过于简单,我深表歉意。
我正在制作一个 rpg mod,其中包含 26 种技能,所有技能的 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;
}
这将给出“技能”列表,每个技能都有其价值