Система групп

Версия Minecraft
1.12.2
API
Forge
112
5
16
Добрейшего времени уток. Созрела идея и вопрос.
Решено было разработать мод, который позволит игрокам кучковаться в группки по X персон и не наносить друг другу урон.
Решил сделать через капабилити, но столкнулся с траблом, что капы сохраняются в NBT, а NBT не может хранить листы.
Есть конечно, идея хранить только ники игроков и таким костылём делить их. Но может у кого есть адекватные идеи?
p.s. Такая система реализованна в моде Aether 2, но чет я там не нашел её в соурсах.
 

VeniVidiVici

Санта Барбарис
327
15
198
Так трабла не в том, что капа не может хранить лист, а в том что ты этот лист не разбиваешь на примитивы, не? Храни длину листа и сами имена "друзей" из этого листа, в чём проблема то?
 
7,099
324
1,510
NBT не может хранить листы
Готового метода чтения/записи List<Some> у NbtTagCompound действительно нет. Но можно написать этот метод самому, придумав(или скорее разглядев) соответствие между твоей структурой данных и форматом нбт.
Кстати, ElegantNetworking может сделать это за тебя:
Java:
@ElegantSerializable
public class MyDataClass implements IByteBufSerializable{
    //some fields
    public List<UUID> players = new ArrayList<>();
}

public class MyCapaProvider implements ICapabilitySerializable {
    MyDataClass instance = new MyDataClass();
    
    public NBTTagCompoundserializeNBT(){
        return ElegantNetworking.getNbtSerializer(MyDataClass.class).serialize(instance);
    }
    
    public void deserializeNBT(NBTTagCompound tag){
        instance = ElegantNetworking.getNbtSerializer(MyDataClass.class).unserialize(tag);
    }
    
    ...
}
Тутор, который стоит прочитать: Разделение Клиент-Сервер и пакетная система ElegantNetworking
 
112
5
16
1,196
31
183
общее хранилище всех "тагов" загнанных в NBT хранилище
Нет, лол. В таглист ты можешь записывать разные данные, или одинаковые, че хочешь короче. А потом в NBTTagCompound запихивать NBTTagList твоей группы, для каждой группы свой NBTTagList. В этот лист просто записывай имена игроков и се, ну можешь еще к нему запихать UUID
 
Сверху