Хранение переменной

Версия Minecraft
1.7.10
372
0
Нужно что при рестарте не терять свои пару важных переменных, знаю что можно использовать WorldSaveData, но пока не понятно как, да и гугл информацию не разжевал.
 
7,099
324
1,510
События WorldEvent.Load,Save + java сериализацию используй
 
2,505
81
397
Примерно так использовать.
Код:
public class SuperPuperClass extends WorldSavedData
{
    public SuperPuperClass(String name)
    {
        super(name);
    }

    @Override
    public void readFromNBT(NBTTagCompound tag)
    {}

    @Override
    public void writeToNBT(NBTTagCompound tag)
    {}
}

public void someMethod()
{
    World world = FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld();
    SuperPuperClass data;
    data = (SuperPuperClass) world.loadItemData(SuperPuperClass.class, "SuperPuperClass");
    if (data == null) {
        data = new SuperPuperClass("SuperPuperClass");
        world.setItemData("SuperPuperClass", data);
        // после изменения данных всегда дергаем этот метод
        data.markDirty();
    }
}


hohserg написал(а):

Сериализация это диииииииииииииико дорого. Лучше вручную загнать в ByteBuf, а потом куда ты там хотел.. Если не хочешь вручную, можно в json
 
7,099
324
1,510
Сериализация удобна тем, что можно в нее загнать любую структуру и не менять для этого код
 
2,505
81
397
Я хотел сделать себе generic WorldSavedData wrapper, сохраняя в json, но не вышло по некоторым причинам. Может быть недостаточно хотел.


hohserg написал(а):
Сериализация удобна тем, что можно в нее загнать любую структуру и не менять для этого код

Ага, вот только в этом массив байт, который получился, помимо нужной информации, хранится огромная куча грязи о классах.
 
3,005
192
592
WorldSavedDatat - это некая БД, в которой ты будешь хранить все, что _тебе_ нужно.
 
372
0
Пробую так, но что то список кривой, или не так создается, вообще хз
Код:
MyData extends WorldSavedData {
    public MyData(String name) {
        super(name);
    }
    
    @Override
    public void writeToNBT(NBTTagCompound compound) {
     NBTTagList tagList = new NBTTagList();
     for(int i = 0; i < MyEvent.list.size(); i++) {
     String s = MyEvent.list.get(i);
     if(s != null) {
     NBTTagCompound tag = new NBTTagCompound();
     tag.setString("" + i, s);
     tagList.appendTag(tag);
     }
     }
     compound.setTag("MyData", tagList);
    }

    public void readFromNBT(NBTTagCompound compound) {
     NBTTagList tagList = compound.getTagList("MyData", 10);
     for(int i = 0; i < tagList.tagCount(); i++) {
     NBTTagCompound tag = tagList.getCompoundTagAt(i);
     String s = tag.getString("" + i);
     MyEvent.list.add(s);
     }
     }

    public static void update() {
    World world = FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld();
    MyData data;
    data = (MyData) world.loadItemData(MyData.class, "MyData");
    if (data == null) {
        data = new MyData("MyData");
        world.setItemData("MyData", data);
        data.markDirty();
    }
 }
 
Сверху