Jump to content

Recommended Posts

Posted

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

Posted

Yeah, I know.

 

So should I use "sendToAllAroung()"?

Is the "ctx.getServerHandler().playerEntity()" then one of the players the packet was sent to?

 

I really don't know how I should do this.

Posted

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?

Posted

Yeah, that's what i thought, too.

But how can I get the GUIScreen which the specific player has opened to set the redstonesignal?

 

Is Minecraft.getMinecraft().currentScreen the right way?

Posted

Yeah, I know, but I think that i am missunderstanding anything.

 

When Player1 has GUI1 opened and Player2 has GUI2 opened, which GUI (1 or 2) is the Minecraft.getMinecraft().currentScreen ???

Posted

Why care who has what open. If you update the tile on the server, mark it for update.

 

Pull the data for the gui right from the tile on the client.

Long time Bukkit & Forge Programmer

Happy to try and help

Posted

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?

Posted

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

Posted

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 :(

Posted

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

Posted

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

  • 3 weeks later...
Posted

Ok so how do I use this to update the client side to be the same as the server side? I've tried calling it at many different places. Do I need to add something else in the tile entity so that it works?

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.