Не синхронизируется entity ID

Версия Minecraft
1.7.10
1,015
9
102
На сервере спавню свой entity entityShield = new EntityDefendDome(owner, domeRadius);. На сервере, и вроде, на клиенте оно появляется

Вот код entity
Java:
public class EntityDefendDome extends Entity {
    public EntityPlayer owner;
    public int radius;

    public EntityDefendDome(World p_i1582_1_) {
        super(p_i1582_1_);
    }

    public EntityDefendDome(EntityPlayer owner, int radius){
        super(owner.worldObj);
        this.owner = owner;
        this.radius = radius;

        setPosition(owner.posX, owner.posY, owner.posZ);
        worldObj.updateEntityWithOptionalForce(this, false);
        NetworkWrapper.instance.sendToAll(new PacketSyncEntity(this));
    }

    @Override
    protected void entityInit() {

    }

    @Override
    public void onUpdate() {
        super.onUpdate();
        if (!worldObj.isRemote) {
            if (owner == null) {
                setDead();
                return;
            }

            setPosition(owner.posX, owner.posY, owner.posZ);
            worldObj.updateEntityWithOptionalForce(this, false);
        }
    }

    @Override
    protected void readEntityFromNBT(NBTTagCompound nbt) {
        owner = (EntityPlayer) worldObj.getEntityByID(nbt.getInteger("playerID"));
        radius = nbt.getInteger("radius");
    }

    @Override
    protected void writeEntityToNBT(NBTTagCompound nbt) {
        nbt.setInteger("playerID", owner.getEntityId());
        nbt.setInteger("radius", radius);
    }
}

Вот я его регаю вместе с рендером
Код:
public class ModEntitiesRegister {

    public static void register(){
        EntityRegistry.registerModEntity(EntityDefendDome.class, "defendDome", 0, HOTMClassesMod.instance,64,1,false);
    }

    public static void registerRenders(){
        RenderingRegistry.registerEntityRenderingHandler(EntityDefendDome.class, new RenderDefendDome());
    }
}

А вот пакет, который отправляют при спавне этой сущности
Код:
public class PacketSyncEntity extends AbstractPacket {
    private int id;
    private NBTTagCompound tag;

    public PacketSyncEntity(){}

    public PacketSyncEntity(Entity entity){
        id = entity.getEntityId();
        tag = new NBTTagCompound();
        entity.writeToNBT(tag);
    }

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(id);
        ByteBufUtils.writeTag(buf, tag);
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        id = buf.readInt();
        tag = ByteBufUtils.readTag(buf);
    }

    @Override
    public void clientHandler(EntityPlayer player) {
        Entity entity = player.worldObj.getEntityByID(id);
        if (entity != null)
            entity.readFromNBT(tag);
    }

    @Override
    public void serverHandler(EntityPlayerMP player) {

    }
}

В пакете на клиенте по ID сущность не находится. ID же должно майном синхрониться. Как так?
 

timaxa007

Модератор
5,831
409
672
Наверное IEntityAdditionalSpawnData.
Иногда Entity не всегда может спавниться на клиентской части и тут IEntityAdditionalSpawnData не поможет.
В предмете через onItemRightClick у меня EntityBullet нормально спавниться, и на клиентской и на серверной стороне, если указать только серверный мир.
А вот через, (ну так скажем) через замороченный код, он у меня спавниться только на серверной стороне с указанием на серверный мир.
 
Сверху