nbt у ентити

Версия Minecraft
1.12.2

ReyMagos

Тег-бомбастер
412
7
121
У меня есть ентити в которой я записываю nbt
Java:
    @Override
    public void readEntityFromNBT(NBTTagCompound compound) {
        super.readEntityFromNBT(compound);
        this.setProfession(compound.getInteger("profession"));
        NBTTagList list = compound.getTagList("offers", 10);
        for (int i = 0; i < list.tagCount(); i++) {
            NBTTagCompound tag = list.getCompoundTagAt(i);
            String name = Lists.newArrayList(tag.getKeySet()).get(0);
            EntityPlayer player = this.world.getPlayerEntityByName(name);
            MerchantRecipeList recipes = new MerchantRecipeList((NBTTagCompound)tag.getTag(name));
            this.recipes.put(player, recipes);
        }
     
    }
Java:
    @Override
    public void writeEntityToNBT(NBTTagCompound compound) {
        super.writeEntityToNBT(compound);
        compound.setInteger("profession", this.getProfession());
        NBTTagList recipes = new NBTTagList();
        for (Map.Entry<EntityPlayer, MerchantRecipeList> entry: this.recipes.entrySet()) {
            NBTTagCompound tag = new NBTTagCompound();
            EntityPlayer player = entry.getKey();
            MerchantRecipeList list = entry.getValue();
            if (list != null) tag.setTag(player.getDisplayNameString(), list.getRecipiesAsTags());
            recipes.appendTag(tag);
        }
        compound.setTag("offers", recipes);
    }
Но при создании ентити появляется ошибка (см. крашлог). Вроде бы это из-за того что до появления ентити nbt ещё нет и прочитать его не получается. Глянул мобов - что-то не нашёл инита nbt заранее. Может есть какой то способ, кроме if (!compound.hasKey("key")) compound.setInteger(*...*). Просто не хочется писать такое в READ nbt.
 
Краш-лог
[10:38:52] [Server thread/ERROR] [FML]: An Entity type redmod.entities.dwarf.EntityDwarf has thrown an exception trying to write state. It will not persist. Report this to the mod author
net.minecraft.util.ReportedException: Saving entity NBT
at net.minecraft.entity.Entity.writeToNBT(Entity.java:1985) ~[Entity.class:?]
at net.minecraft.entity.Entity.writeToNBTOptional(Entity.java:1867) ~[Entity.class:?]
at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:393) [AnvilChunkLoader.class:?]
at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:185) [AnvilChunkLoader.class:?]
at net.minecraft.world.gen.ChunkProviderServer.saveChunkData(ChunkProviderServer.java:214) [ChunkProviderServer.class:?]
at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:242) [ChunkProviderServer.class:?]
at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:1061) [WorldServer.class:?]
at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:468) [MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.saveAllWorlds(IntegratedServer.java:274) [IntegratedServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:177) [IntegratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:590) [MinecraftServer.class:?]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]
Caused by: java.lang.NullPointerException
at net.minecraft.network.datasync.EntityDataManager.get(EntityDataManager.java:149) ~[EntityDataManager.class:?]
at redmod.entities.dwarf.EntityDwarf.getProfession(EntityDwarf.java:219) ~[EntityDwarf.class:?]
at redmod.entities.dwarf.EntityDwarf.writeEntityToNBT(EntityDwarf.java:85) ~[EntityDwarf.class:?]
at net.minecraft.entity.Entity.writeToNBT(Entity.java:1956) ~[Entity.class:?]
... 11 more
Краш-лог:
[10:38:52] [Server thread/ERROR] [FML]: An Entity type redmod.entities.dwarf.EntityDwarf has thrown an exception trying to write state. It will not persist. Report this to the mod author
net.minecraft.util.ReportedException: Saving entity NBT
	at net.minecraft.entity.Entity.writeToNBT(Entity.java:1985) ~[Entity.class:?]
	at net.minecraft.entity.Entity.writeToNBTOptional(Entity.java:1867) ~[Entity.class:?]
	at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:393) [AnvilChunkLoader.class:?]
	at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:185) [AnvilChunkLoader.class:?]
	at net.minecraft.world.gen.ChunkProviderServer.saveChunkData(ChunkProviderServer.java:214) [ChunkProviderServer.class:?]
	at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:242) [ChunkProviderServer.class:?]
	at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:1061) [WorldServer.class:?]
	at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:468) [MinecraftServer.class:?]
	at net.minecraft.server.integrated.IntegratedServer.saveAllWorlds(IntegratedServer.java:274) [IntegratedServer.class:?]
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:177) [IntegratedServer.class:?]
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:590) [MinecraftServer.class:?]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_171]
Caused by: java.lang.NullPointerException
	at net.minecraft.network.datasync.EntityDataManager.get(EntityDataManager.java:149) ~[EntityDataManager.class:?]
	at redmod.entities.dwarf.EntityDwarf.getProfession(EntityDwarf.java:219) ~[EntityDwarf.class:?]
	at redmod.entities.dwarf.EntityDwarf.writeEntityToNBT(EntityDwarf.java:85) ~[EntityDwarf.class:?]
	at net.minecraft.entity.Entity.writeToNBT(Entity.java:1956) ~[Entity.class:?]
	... 11 more
Последнее редактирование:
Решение
но теперь при создании ентити командой
Там вроде как пишет, что у тебя профессия у моба нулл в дата манагере.
Это вроде как не сложно, Для понимания ошибки. Фиксится установкой значения по дефолту в ините моба.

-Хотя хз.
7,099
324
1,510

ReyMagos

Тег-бомбастер
412
7
121
код конструктора
Java:
    public EntityDwarf(World world) {
        super(world);
        this.setSize(0.6F, 1.0F);
        this.setAge(3);
    }

    public EntityDwarf(World world, double x, double y, double z) {
        super(world);
        this.setSize(0.6F, 1.0F);
        this.setPositionAndUpdate(x, y, z);
        this.setAge(3);
    }

    public EntityDwarf(World world, double x, double y, double z, int age) {
        super(world);
        this.setSize(0.6F, 1.0F);
        this.setPositionAndUpdate(x, y, z);
        this.setAge(age);
    }
 
3,005
192
592
но теперь при создании ентити командой
Там вроде как пишет, что у тебя профессия у моба нулл в дата манагере.
Это вроде как не сложно, Для понимания ошибки. Фиксится установкой значения по дефолту в ините моба.

-Хотя хз.
 
Сверху