Jump to content

Recommended Posts

Posted

Hi everyone,

 

I have an item that stores an entity. I want this item to spawn the entity a given distance away from wherever the player right clicked the item based on a raytrace.

 

I now have an issue

if (world.isRemote){
			MovingObjectPosition mop = player.rayTrace(5, 1.0F);
			int xCoord;
    		int yCoord;
    		int zCoord;
    		
    			if (!world.isAirBlock(mop.blockX, mop.blockY, mop.blockZ)){ 
    			xCoord = mop.blockX;
			yCoord= mop.blockY + 1;
			zCoord = mop.blockZ;
    			} else {
    				xCoord = mop.blockX;
    				yCoord= mop.blockY;
    				zCoord = mop.blockZ;
    				}
  //send the packet here to update the server values so that I can then spawn my entity at a later time in the code
    			}

 

The ray trace has to occur client side but I need the results of the ray trace on server side. How would you suggest the packet to work so that I can pass the values from the client player to the server so that they can be used to spawn the entity?

 

public class PacketC2SUpdateRayTraceCoords extends AbstractMessageToServer<PacketC2SUpdateRayTraceCoords> {

private int xCoord;
private int yCoord;
private int zCoord;


public PacketC2SUpdateRayTraceCoords() {
}

public PacketC2SUpdateRayTraceCoords(int xCoord, int yCoord, int zCoord) {
//these are obtained from the client
this.xCoord = xCoord;
this.yCoord = yCoord;
this.zCoord = zCoord;

}

@Override
protected void read(PacketBuffer buffer) throws IOException {

xCoord = buffer.readInt();
yCoord = buffer.readInt();
zCoord = buffer.readInt();
}

@Override
protected void write(PacketBuffer buffer) throws IOException {

buffer.writeInt(xCoord);
buffer.writeInt(yCoord);
buffer.writeInt(zCoord);

}

@Override
public void process(EntityPlayer player, Side side) {
//The stuff in here occurs server side
}
}

Posted

My thoughts were to use my IEEP class for my player so that I can simply grab the values from the ray trace send them to the IEEP class on server side and then access the IEEP class from server side in the onItemRightClick method to use them for my spawning coordinates but I feel like there is a better way to achieve this since my rayTrace would happen in the onItemRightClick method

Posted

Raytracing doesn't have to happen on the client side, you've just picked a client-only method. Look at

ItemMonsterPlacer#onItemRightClick

to see how it raytraces on the server side.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

I have been looking at it but when I try to use their method i cannot achieve what i want since the movingObjectPosition is null when you aim into the sky and I want my mob to spawn regardless of where you point the mouse (at a set radius) and if you point it on the ground it spawns just above the block you pointed at.

Posted

The last argument of

World#rayTraceBlocks

(used by both

EntityLivingBase#rayTrace

and

Item#getMovingObjectPositionFromPlayer

) determines whether it should return the

MovingObjectPosition

of the last uncollidable block or

null

when the raytrace doesn't hit anything. You'll need to call this yourself with the appropriate arguments rather than using one of its wrappers, though you can reuse the code from

Item#getMovingObjectPositionFromPlayer

.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

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.