Jump to content

Recommended Posts

Posted

Hello, I'm trying to make my entity render in different ways based on a simple boolean value stored in its entity class. This boolean is initialized when the entity is created like so:

worldObj.spawnEntityInWorld(new MyEntity(worldObj, posX, posY, posZ, intPar5, booleanPar6));

and then the entities constructor is as so..

    public MyEntity(World par1World, double par2, double par4, double par6, int par8, boolean flag)
    {
        super(par1World);
        this.setSize(0.5F, 0.5F);
        this.yOffset = this.height / 2.0F;
        this.setPosition(par2, par4, par6);
        this.rotationYaw = (float)(Math.random() * 360.0D);
        this.var1 = par8;
        this.flag = flag;
        System.out.println(flag);
    }

 

However, when I try to access my flag variable from my renderer, it always returns the default value (false) even if true is used to construct the entity class.

public boolean getFlag() {
    	return flag;
    }

if (par1MyEntity.getFlag()) {
		//do stuff
}
	else {
		//do other stuff
}

 

The else section will always be run as getFlag() returns false regardless of the actual value, but as you can see above, it returns the value set by the constructor. This values is never edited from its default constructed value.

 

Could this be because the client can't access the data, does it need to be send via packets? or should entities automatically send their data?

Posted

Yes, since you spawn entities on server side, the client side entity is only default.

But since most data is only handled server side, it doesn't matter.

You'll need packets for client side to use some values.

Posted

Right, I've set up my packet for this. However, I cannot get the instance of the entity on the client side to change its variables. Here is my packet class:

public class MyEntityPacket extends MyModPacket {

int entityID,flag;

public MyEntityPacket(int entityID, int flag) {
	this.entityID = entityID;
	this.flag = flag;
}

public MyEntityPacket() {}

@Override
public void write(ByteArrayDataOutput out) {
	out.writeInt(entityID);
	out.writeInt(flag);
}

@Override
public void read(ByteArrayDataInput in) {
	entityID = in.readInt();
	flag = in.readInt();
}

@Override
public void execute(EntityPlayer player, Side side) {
	if (side.isClient()) {
		if (Minecraft.getMinecraft().theWorld.getEntityByID(entityID) instanceof MyEntity) {
		MyEntity e = (MyEntity) player.worldObj.getEntityByID(entityID);
		e.setFlag(flag == 1 ? true : false);
		} else {
			System.out.println("Something ****** up! - supposed my entity with id: " + entityID + " isn't");
		}
	}
}

}

 

I've converted my boolean to an integer for the process of sending the packet. That all works fine and dandy. My problem is that the method getEntityByID(entityID) always returns null instead of the entity. I'm using this to create the packet in the constructor of the entity (it is the final thing in the constructor so the entity should be fine).

PacketDispatcher.sendPacketToAllAround(par2, par4, par6, 250, this.dimension, new MyEntityPacket(this.entityId, flag ? 1 : 0).makePacket()); // 250 is view radius

Can anyone enlighten me? Do I need to use the UUID (persistent id) instead? If so, how would I get the entity from it?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.