Jump to content

Best information to contained in custom packet to sync nbt on itemstack/tileentity


Recommended Posts

Posted (edited)

OK, this often encounter when I need to change nbt data on gui action in client.

 

I know I need to send custom packet to server when client do something on gui.

But I confused the information I give in message (used in let server know what itemstack/tileentity to update) is appropriate or not.

I don't want increase too much loading on server and the way must be logical.

 

So, for itemstack.

I may want to contain uuid of player in packet.

Then on the server, I use uuid to get the PlayerEntity, use some method like PlayerEntity#getHeldEquipment get the itemstack and valid it. Then change it's nbt data.

 

But I found that some thread here said don't trust uuid from client, so what other way I can use will be a good idea?

 

And, for tileentity.

I may want to contain postion of the block.

Then on server, I use World#getTileEntity to get the tileentity and valid it. Then do something with its nbt data.

 

This is the way I current used in sync tileentity. It worked, but is this a good idea?

 

====================================================================

OK, my bad sorry.

I found I can get player simply using MessageContext#getServerHandler#player......

 

Just ignore this post qq.

Edited by immortalmice
Posted
9 hours ago, diesieben07 said:

You don't need to send the UUID. NetworkEvent.Context#getSender gives you the player who sent the packet.

 

I'm currently using 1.12.2-14.23.5.2847, I can't find NetworkEvent.Context.

The method I process my message is something like this, I only have MessageContext.

 

public static class Handler implements IMessageHandler<RecipeTableMessage, IMessage>{
		@Override
		public IMessage onMessage(RecipeTableMessage message, MessageContext ctx){
  			/** do something here ...... */
  		}
  }

 

9 hours ago, diesieben07 said:

That would be correct, however do not send NBT data, send information about what the client did (i.e. "user pressed button X" not "update contained energy to 250").

Yes, I only send the action client did, and process data always on the server.

Posted
1 minute ago, immortalmice said:

 

I'm currently using 1.12.2-14.23.5.2847, I can't find NetworkEvent.Context.

The method I process my message is something like this, I only have MessageContext.

 


public static class Handler implements IMessageHandler<RecipeTableMessage, IMessage>{
		@Override
		public IMessage onMessage(RecipeTableMessage message, MessageContext ctx){
  			/** do something here ...... */
  		}
  }

 

Yes, I only send the action client did, and process data always on the server.

@immortalmice, 1.12.2 is no longer supported due to his age: update to a modern Version to receive support. Pls read the 

that is standing over your topic title. 

New in Modding? == Still learning!

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

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