Jump to content

[SOLVED] Machine's GUI desync after re-entering the world


Recommended Posts

I've got a trouble with GUI. My GUI class has a variable which links to the machine's TileEntity object, but all the fields inside this object are nullified after re-entering the world and as the result, GUI can't have the right data.


I used debug and messages to find out that all the data in actual TileEntity object are loaded properly and that might be some kind of a desync problem between the server and client parts of the game. Also, there are some problems with item slots: the items placed inside dissapear from the slot, but when clicking on it again, they are being grabbed as if they were in the slot.


I had similar problems when 1.3.1 came out and that was the reason I stopped further development of my mod.


Here is the code of all the classes you might need. I count on your help.

MainModClass: http://pastebin.com/0v8Qda1H

ServerPacketHandler: http://pastebin.com/Tjscq5tE

ClientPacketHandler: http://pastebin.com/UkFHyzih

GUIHandler: http://pastebin.com/kuXGPXF6

GUIClass: http://pastebin.com/KyTBqp3U

TileEntityClass: http://pastebin.com/iKHv730c

BlockClass: http://pastebin.com/byrXsT8i

ContainerClass: http://pastebin.com/DvY1s47D

Link to comment
Share on other sites

Okay, I've decided to use custom packets to manually sync data between GUI and TileEntity, stored on server. In order to do this I need server world objectto get to the TileEntity I need. Could anyone help me? How do I get to the world object using static access or something..?

Link to comment
Share on other sites

I had to search a longer time for a stabel way to get the world, this is what I found (wrapped in a method in my commonproxy):


* Gets the current world.
* @param dim int the dimension of the world
* @return World the current world
public World getWorld(int dim) {
return DimensionManager.getWorld(dim);

Link to comment
Share on other sites

Allright. I solved the problem by rewriting Container class.

When disconnecting from the world and logging in again my client apparently had no idea what data is stored in the TileEntity class, since it is stored on the server part.


I looked at vanilla ContainerFurnace code and figured out that 

public void addCraftingToCrafters(ICrafting par1ICrafting)

public void detectAndSendChanges()

and  public void updateProgressBar(int index, int value)


are responsible for syncing the client and server GUI parts. I just implemented these methods in my container class and made them do all the syncing stuff properly and voila - everything is displaying correctly and client side has all the data it needs to display machine's GUI properly.


That's my COntainer code now: http://pastebin.com/FKP4C0yN

Link to comment
Share on other sites

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.

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.


  • Create New...

Important Information

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