Сохранение энтити

Версия Minecraft
1.7.10
106
8
19
Всем шалом.
Есть энтити который хранит в себе Entity[] o_O
Записываю Entity[] в нбт
Java:
        NBTTagList nbtlist = new NBTTagList();
        for (int i = 0; i < this.vehicles.length; i++) {
            NBTTagCompound compound = new NBTTagCompound();
            if (this.vehicles[i] != null) {
                this.vehicles[i].writeToNBT(compound);
            }
            nbtlist.appendTag(compound);
        }
        nbt.setTag("vehicles", nbtlist);
читаю энтити из нбт
Java:
        NBTTagList list;
        if (nbt.hasKey("vehicles", 9)) {
            list = nbt.getTagList("vehicles", 10);
            for (int i = 0; i < this.vehicles.length && i < list.tagCount(); i++) {
                this.vehicles[i] = EntityList.createEntityFromNBT(list.getCompoundTagAt(i), worldObj);
            }
        }
        nbt.removeTag("vehicles");
Пытаюсь пакетом достать из своего энтити Entity[] но получаю null.В чем может быть проблема?
Если что энтити сетаю также через пакет но оно не сохраняется после перезахода.
 
929
30
66
Java:
NBTTagList nbtlist = new NBTTagList();

        for (int i = 0; i < this.vehicles.length; i++) {

            NBTTagCompound compound = new NBTTagCompound();

            if (this.vehicles[i] != null) {

                this.vehicles[i].writeToNBT(compound);
                nbt.setTag("vehiclesData" + i, compound);

            }

            nbtlist.appendTag(compound);

        }

        nbt.setTag("vehicles", nbtlist);

Java:
NBTTagList list;
        if (nbt.hasKey("vehicles", 9)) {
            list = nbt.getTagList("vehicles", 10);
            for (int i = 0; i < this.vehicles.length && i < list.tagCount(); i++) {
                NBTTagCompound root = (NBTTagCompound)nbt.getTag("vehiclesData" + i);
                this.vehicles[i] = EntityList.createEntityFromNBT(list.getCompoundTagAt(i), worldObj);
                this.vehicles[i].readFromNBT(root);
            }
        }
        nbt.removeTag("vehicles");
 
106
8
19
Java:
NBTTagList nbtlist = new NBTTagList();

        for (int i = 0; i < this.vehicles.length; i++) {

            NBTTagCompound compound = new NBTTagCompound();

            if (this.vehicles[i] != null) {

                this.vehicles[i].writeToNBT(compound);
                nbt.setTag("vehiclesData" + i, compound);

            }

            nbtlist.appendTag(compound);

        }

        nbt.setTag("vehicles", nbtlist);

Java:
NBTTagList list;
        if (nbt.hasKey("vehicles", 9)) {
            list = nbt.getTagList("vehicles", 10);
            for (int i = 0; i < this.vehicles.length && i < list.tagCount(); i++) {
                NBTTagCompound root = (NBTTagCompound)nbt.getTag("vehiclesData" + i);
                this.vehicles[i] = EntityList.createEntityFromNBT(list.getCompoundTagAt(i), worldObj);
                this.vehicles[i].readFromNBT(root);
            }
        }
        nbt.removeTag("vehicles");
Ща протестирую.
 
78
3
10
Плюс у тебя есть проблема с логикой.
1. Ты создаешь пустой компаунд.
2. Если вех не нулл - ты заполняешь этот компаунд.
3. Ты добавляешь компаунд к листу. Вероятно, пустой - из кода не понятно, есть ли нулы в массиве (но почему не лист?).
Попробуй подобное:
Java:
    public void testNbt(NBTTagCompound nbt) {
        NBTTagList nbtlist = new NBTTagList();
        for (Entity vehicle : this.vehicles) {
            if (vehicle != null) {
                NBTTagCompound compound = new NBTTagCompound();
                vehicle.writeToNBT(compound);
                nbtlist.appendTag(compound);
            }
        }
        nbt.setTag("vehicles", nbtlist);
    }
 
78
3
10
Ну раз по фастику - то кот не аутентичный, даже не копирован.
Если не решишь - цепляй дебагер, ставь брейкпоинт в метод, показывай состояние массива, есть ли там нулы, всё ли в массиве в порядке.
Потом проведи метод до почти верха стэка, сохрани оттуда НБТ в файл и смотри что туда написалось. Я всё же грешу на пустые компаунды.

Попутный вопрос: энтити кастомный наследник от ванильного? В нем переопределен метод записи в нбт? Может быть там проблема. Листы сами по себе работают, я их использовал.

PS: Ну и да, если проблем с логикой и правда нет - запихни всё же инстанциацию и апенд компаунда под нулл-чек.
 
106
8
19
net.minecraft.util.ReportedException: Loading entity NBT
at net.minecraft.entity.Entity.readFromNBT(Entity.java:1642) ~[Entity.class:?]
at net.minecraft.entity.EntityList.createEntityFromNBT(EntityList.java:191) [EntityList.class:?]
at net.minecraft.server.management.ServerConfigurationManager.initializeConnectionToPlayer(ServerConfigurationManager.java:192) [ServerConfigurationManager.class:?]
at cpw.mods.fml.common.network.handshake.NetworkDispatcher.completeServerSideConnection(NetworkDispatcher.java:190) [NetworkDispatcher.class:?]
at cpw.mods.fml.common.network.handshake.NetworkDispatcher.completeHandshake(NetworkDispatcher.java:463) [NetworkDispatcher.class:?]
at cpw.mods.fml.common.network.internal.HandshakeCompletionHandler.channelRead0(HandshakeCompletionHandler.java:17) [HandshakeCompletionHandler.class:?]
at cpw.mods.fml.common.network.internal.HandshakeCompletionHandler.channelRead0(HandshakeCompletionHandler.java:11) [HandshakeCompletionHandler.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:98) [SimpleChannelInboundHandler.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [MessageToMessageDecoder.class:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?]
at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?]
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
Caused by: java.lang.NullPointerException
at xyz.wendoxdmod.entity.EntityHouse.readEntityFromNBT(EntityHouse.java:252) ~[EntityHouse.class:?]
at net.minecraft.entity.Entity.readFromNBT(Entity.java:1630) ~[Entity.class:?]
... 23 more
Прикол прикольный кстати.Энтити сетаю через пакет.
Java:
        NBTTagList list;
        if (nbt.hasKey("vehicles", 9)) {
            list = nbt.getTagList("vehicles", 10);
            for (int i = 0; i < this.vehicles.length && i < list.tagCount(); i++) {
                NBTTagCompound root = (NBTTagCompound) nbt.getTag("vehiclesData" + i);
                if (EntityList.createEntityFromNBT(list.getCompoundTagAt(i), worldObj) != null) {
И все,просто Entity == null.
 
Последнее редактирование:
106
8
19
Java:
NBTTagList nbtlist = new NBTTagList();

        for (int i = 0; i < this.vehicles.length; i++) {

            NBTTagCompound compound = new NBTTagCompound();

            if (this.vehicles[i] != null) {

                this.vehicles[i].writeToNBT(compound);
                nbt.setTag("vehiclesData" + i, compound);

            }

            nbtlist.appendTag(compound);

        }

        nbt.setTag("vehicles", nbtlist);

Java:
NBTTagList list;
        if (nbt.hasKey("vehicles", 9)) {
            list = nbt.getTagList("vehicles", 10);
            for (int i = 0; i < this.vehicles.length && i < list.tagCount(); i++) {
                NBTTagCompound root = (NBTTagCompound)nbt.getTag("vehiclesData" + i);
                this.vehicles[i] = EntityList.createEntityFromNBT(list.getCompoundTagAt(i), worldObj);
                this.vehicles[i].readFromNBT(root);
            }
        }
        nbt.removeTag("vehicles");
@Liahim
 
Сверху