- 1,015
- 9
- 102
На сервере спавню свой entity
Вот код entity
Вот я его регаю вместе с рендером
А вот пакет, который отправляют при спавне этой сущности
В пакете на клиенте по ID сущность не находится. ID же должно майном синхрониться. Как так?
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 же должно майном синхрониться. Как так?