Запись Entity в NBT

Версия Minecraft
1.7.10
126
6
33
Суть такова: в НБТ одного энтити нужно записать собственно другой энтити. То есть на пример энтити 1 имеет переменную public Entity entity2, значение которой должно сохраниться после перезапуска. Была попытка записывать его ID, но при перезапуске он меняется, через UUID не получить энтити из мира.
 
7,099
324
1,510
Посмотри флакон душ из ender io
 
126
6
33
Такая проблема: вполне ясно как записать энтити в нбт, но раскопки не дали результатов по поводу как получить его из нбт. Есть идея записывать UUID как строку в нбт и при выгрузке пройтись по загруженным энтитям сравнивая UUID
 
2,505
81
397
Зачем тебе UUID?
Если у тебя энтити какой-то определенный, то создавай его инстанс, распаковывай в него нбт и спавни.
Если вообще любой энтити, то посмотри как они записываются в мир. Скорее всего, там в нбт записывается id зареганной энтити, а затем рефлексией создается инстанс.
 
126
6
33
Глянул как работает экран телеметрии из галактика
Java:
@Override
    public void readFromNBT(NBTTagCompound nbt)
    {
        super.readFromNBT(nbt);
        Long msb = nbt.getLong("entityUUIDMost");
        Long lsb = nbt.getLong("entityUUIDLeast");
        this.toUpdate = new UUID(msb, lsb);
    }
   
    @Override
    public void writeToNBT(NBTTagCompound nbt)
    {
        super.writeToNBT(nbt);
        if (this.linkedEntity != null && !this.linkedEntity.isDead)
        {
            nbt.setLong("entityUUIDMost", this.linkedEntity.getUniqueID().getMostSignificantBits());
            nbt.setLong("entityUUIDLeast", this.linkedEntity.getUniqueID().getLeastSignificantBits());
        }
    }
В принципе именно то что мне и нужно

UPD: в принципе у них сделано как я и предлагал:

Java:
public void addTrackedEntity(UUID uuid)
    {
        this.pulseRate = 400;
        this.lastHurttime = 0;
        List<Entity> eList = this.worldObj.loadedEntityList;
        for (Entity e : eList)
        {
            if (e.getUniqueID().equals(uuid))
            {
                this.linkedEntity = e;
                if (e instanceof EntitySpaceshipBase) ((EntitySpaceshipBase)e).addTelemetry(this);
                return;
            }
        }
        //TODO Add some kind of watcher to add the entity when next loaded
        this.linkedEntity = null;
    }
 
Сверху