Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Synchronizing GUI


Stjubit
 Share

Recommended Posts

Hello,

 

I have a GUI with 2 Buttons (ON and OFF) which activates/deactivates a redstone signal. My problem is, that when two player's are accessing the same GUI and one player clicks the ON-Button, the other player doesn't see that. How can I make all other players updating their GUIs?

 

I am already sending a packet to the server with the new state. This packet redirects the state to the container which sets it in the TileEntity.

 

I hope you can understand my problem, thanks,

Julian

Link to comment
Share on other sites

"a redstone signal" - you need to store this somewhere, e.g. in metadata or whatever. Then just access that information in the GUI (metadata would be synced automatically, everything else you would have to do by hand) and send a packet to the server to change it when the button is clicked.

Link to comment
Share on other sites

I stored the redstonesignal in the TileEntity and I did it all by hand.

Immediatly after the player opens a GUI, I send a packet to the player with the redstonesignal to display it in the GUIContainer.

 

But how can I "update" the GUI of all players with the new redstonesignal when the GUI is already opened?

Link to comment
Share on other sites

But if i try to get the redstonesignal of the TileEntity in the initGui()-method, the redstonesignal is always null. I think that I always need to send the redstonesignal to the client immediatly after I open the GUI. Otherwise everything will be null, because I can't get things on the Server from the Client without packets, or am I something missunderstanding?

Link to comment
Share on other sites

EDIT:

 

Okay, everything is working fine except for keeping track which players have opened the GUI.

So, I created a List of EntityPlayerMP and every time someone is opening the GUI, I add the player to the List.

In the GUIContainer, I overwrote the onGuiClosed()-method to remove the player when he closed the GUI.

 

Now the problem: When the player has the GUI opened and stops the Minecraft process (or clicks on the X), the onGuiClosed()-method isn't called.

Is there a event which is fired when the player leaves the game?

 

Thanks,

Julian

Link to comment
Share on other sites

EDIT:

 

I can't send the packet to all around, because if there are 2 blocks next to each other and player1 is accessing the gui in block1 and player2 is accessing the gui in block2, both players will get the update and that's a huge problem.

 

So, I need to check if the player (to which the packet was sent) has opened the same GUI, but how?!?

 

It seems that I ran into a bit of a problem here :(

Link to comment
Share on other sites

Again I will say, when the tile entity on the server changes, tell it to send a packet to the client updating its tilentity.

 

  markblockforupdate.  Have your tilentity read/write the nbt data correctly.

 

Let the GUI naturally update with the new data from your freshly updating tile. 

 

You don't need to worry about who has what opened.

 

 

Long time Bukkit & Forge Programmer

Happy to try and help

Link to comment
Share on other sites

Gui

  - render background, text, whatever the heck

      - tile.getMana()

 

oops, that returned zero or null

 

Sync data from server to client.

 

Wow, now the tile on client knows what server knows.

 

This time when my gui looks, it gets real info. 

 

 

In your tile

- make sure everytime you change a value, send the packet from server to client.  I actually mark a flag on the tile and then on a periodic tick update the client, but if you only have a few fields, so be it.

- make sure your variables is stored in NBT

- make sure the packetreceived on client method in the tile updates right.

 

Long time Bukkit & Forge Programmer

Happy to try and help

Link to comment
Share on other sites

  • 3 weeks later...

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
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.

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.