Jump to content

Recommended Posts

Posted

Packets.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
  • Like 1

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

As mentioned, the client and server are always only connected by a network connection (even when in "single player" integrated server mode). So you need network packets to communicate in both directions.

 

For most modding purposes, the built-in packets aren't always going to help, but sometimes you might want to look at them if you feel that what you're doing is likely also communicated by vanilla. For example, the container system already communicates the inventories and actions between client and server.

 

Tile entities have a data packet system (using tag compounds), so I think you can just hook into that.

 

For entities, with little bits of information there is a mechanism called data watcher (or I think that is old name, maybe data manager now).

 

Lastly, there is fully custom packets. There is a custom packet already available, but it is also easy to use Forge simple networking implementation. 

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted
  On 5/13/2018 at 3:22 PM, jabelar said:

As mentioned, the client and server are always only connected by a network connection (even when in "single player" integrated server mode). So you need network packets to communicate in both directions.

 

For most modding purposes, the built-in packets aren't always going to help, but sometimes you might want to look at them if you feel that what you're doing is likely also communicated by vanilla. For example, the container system already communicates the inventories and actions between client and server.

 

Tile entities have a data packet system (using tag compounds), so I think you can just hook into that.

 

For entities, with little bits of information there is a mechanism called data watcher (or I think that is old name, maybe data manager now).

 

Lastly, there is fully custom packets. There is a custom packet already available, but it is also easy to use Forge simple networking implementation. 

Expand  

So, I try to get 'TIME' from NBT, but I don't know why it didn't working. So, writeToNBT in my Tile Entity class looks like that:

	@Override
	public NBTTagCompound writeToNBT(NBTTagCompound compound) {
		super.writeToNBT(compound);
		compound.setInteger("time", this.time);
		compound.setInteger("maxTime", METAL_REFINERY_WORKTIME);
		compound.setTag("items", this.itemStackHandler.serializeNBT());
		return compound;
	}

And my GUI Screen Updater looks like that:

	@Override
	public void updateScreen() {
		NBTTagCompound compound = new NBTTagCompound();
		compound = this.te.writeToNBT(compound);
		this.time = compound.getInteger("time");
		this.maxTime = compound.getInteger("maxTime");
		Core.logger.info(compound);
		super.updateScreen();
	}

What's wrong?

Full code:

Block: *CLICK*

Tile Entity: *CLICK*

Container: *CLICK*

GUI: *CLICK*

  • Like 1
Posted

You can use the built-in gui sync methods in Container class: Container#addListener(IContainerListener listener) is for initial sync when the player opens the GUI, Container#detectAndSendChanges() is for periodic detection of changes and sending those changes to the client and Container#updateProgressBar(int id, int data) is for receiving updates on the client. You send updates with IContainerListener#sendWindowProperty. See ContainerFurnace or ContainerBrewingStand for examples.

This obviously only works for the GUIs. If you want the data for a progress bar in the world or for something else you will have to use packets as Draco said.

Posted
  On 5/13/2018 at 2:15 PM, Draco18s said:

Packets.

Expand  

So, I tried. Crash:

  Reveal hidden contents

Packet Handler: *CLICK*

What's wrong. Yeah, I don't like packets and never work with it:(

  • Like 1
Posted

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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.