[OUTDATED] MinecraftGUI - A GUI manager


##MinecraftGUI is a gui manager that allow you to manage graphical elements in the player screen.

###Features

  • The players can interact with the interface(Text fields and buttons).
  • Display images downloaded from internet(Support PNG, JPG and GIF format) and from the minecraft resources.
  • Write text with custom fonts downloaded from internet(Support TTF and OTF format) and the font of minecraft.
  • Open website via the game.
  • Each graphical component have a lot of attributes to customize each interaction with the player.
  • Create graphical elements directly on the code or with xml file(html style) and customize the elements with a css file.
  • A tool integrated to create and edit the interface of a plugin.
  • Event system to interact with the player interactions.
  • Simple API to ease the development of graphical component.

###To do:

  • Finalize the tool integrated.
  • Implement the plugin channel system.
  • Documentation.

####Video:
(These videos only show some features)
- YouTube

If you have some questions about the project, send me a private message in french or in english.

6 Likes

Does this use Sponge or Forge or both?
Or is it “just” a normal Vanilla mod?

Looks good so far. I hope Sponge can make this happen sometime in the future.

The MinecraftGUI plugin use the spongeapi only, and the MinecraftGUI mod use Forge.

MinecraftGUI plugin = server version.
MinecraftGUI mod = client version.

Requires both client and server mods I presume for the plugin version, correct?

The plugin doesn’t require the mod. If the player don’t have the mod, he will be able to connect to the server.

If I understand this correctly. This uses Plugin Message Packets right?

(For those that wonder how you make these in sponge.)

No, i created my own system to do the communication between the player and the server.

You really should use a standard protocol. It will be better in the long run.

Also, this may or may not be of interest
A client side GUI library:

If you did made your own system. Than vanilla clients will crash if the server sends a packet from you. They way you have to see it is like reading a book in another language. The client will be : I don’t understand this packet. But even worse, it will be unable to determine where the next packet is. Result: It disconnects the server with protocol error.

A solution for the above would be framing each packet. But for legacy and timing reasons, Minecraft does not do that.

How my system work:

Server side:

  1. The server start.
  2. When the event onServerStartingEvent is called, MinecraftGUI start listening on the port 20000.
  3. At this point, the server is waiting connection.

Client side:

  1. When you connect to a server. MinecraftGUI will try to connect to the port 20000. If he can’t, MinecraftGUI won’t start.
  2. MinecraftGUI mod will send the player UUID to MinecraftGUI plugin. MinecraftGUI plugin will do the authentication of this player.
  3. If the authentication is good, the player can receive command from the server. If not, MinecraftGUI plugin will close the connection and MinecraftGUI mod will stop.

I tested my system and it worked correctly.

Thats a lot of extra work thought: http://www.minecraftforge.net/wiki/Packet_Handling.

I know I could have used that system but I wanted to be independent. It was one of my first option but I prefered to do my own system.

What if there is another service running on that port? Is the port configurable, and how is the client able to know what port is currently configured?

The port is configurable. When the client try his connection and it failed, a pop-up will appear on his screen to ask if the player know if the server has the plugin. If the player click yes, he will have to enter the port.

I like how you handle Vanilla Clients. But what happens if i try to write a message to a vanilla user? he can’t read it obviously via the gui (is there a commandline/chat option for vanilla?) or is this message just “lost”?

1 Like

You need to imagine the gui like a command.

Example:
I create a messenger plugin. To send a messenge to someone I need to write to command:
/message sendTo [player name] message [message]

That command call the function:
sendMessageTo(String playerNameFrom, String playerNameTo, String message);

Now I want to support MinecraftGUI.
You will create two input and one button. First input will receive the name of the player to send the message. The second will receive the content of the message. After, you link the button to the two inputs. When the player will click the button, the server will receive the two input. The server will call an event when he will receive the two inputs.
When you receive the event, you will have to call the same function that the command call.
sendMessageTo(String playerNameFrom, String playerNameTo, String message);

1 Like

i have seen the Youtube videos and in my opinion its one badass plugin your are working on man XD

3 Likes

Curious - why a Sponge plugin and a Forge client mod? Why not just do a universal Forge mod and call it done?

At the beginning It was supposed to be supported on Bukkit.

Sponge Plugin + Client mod = Vanilla Clients can connect, just missing some functionality
Forge Mod = Clientmod required