The GMTool has the ability to use four types of plugins at the moment:
To install a plugin, simply put it into the /plugins folder of your GMTool. A plugin can either be a .jar file or a directory tree containing the files, both methods will be recognized by the GMTool.
Earlier versions of the GMTool were only able to read plugins from the default package, but now it should find all plugins in every package available, so don't worry about this. Simply create a plugin and distribute it.
To create a plugin, you simply have to extend your plugin from one of the four base classes (from the GMTool.jar):
Sheet, CombatSheet and GenericPlugin are simply a little bit enhanced JPanels, which will be displayed in the correct places. DiceRoller isn't, but has to deliever a new JPanel as a result (this JPanel then will be displayed).
Sheet is basically a JPanel. Extend your own class from it and override the setSelectedCharacter-method, which will be called when another character is selected from the list. In this method, simply set all the values from the given character in your sheet, so that the display is correct. Since version 1.8 there's a convenient method that saves you some work: addAutoUpdate - call it in the constructor of your sheet to specify fields that will be automatically updated with the correct value, for example:
addAutoUpdate("Attributes.Strength", jtfStrength);
In this example, jtfStrength (a JTextField) will automatically updated with the value for Attributes.Strength of the selected character before(!) your setSelectedCharacter is called. At the moment, addAutoUpdate works with any subclass of JTextComponent (for example JTextField and JTextArea, where the value of the node will be set as text) and with JLists (where all children of the given node will be added to the list).
CombatSheet is also technically a simple JPanel. Also here you'll have to override setSelectedCharacter for the same reason as with Sheet. You can also override getListItem to return an own Item that will be displayed in the List (normaly, it's only a JLabel with the name, but you could, for example, add the Initiative and Damage there). If you want, you can also call sortListBy( String ), which will sort the list after a specific node, for example Attributes.Initiative, Attributes.Level or something like that.
Extend your class from DiceRoller and override the getResultPanel( Object ) to deliever your result on a JPanel. Remember that you can use the Die class, which is a graphical D6 on your Panel. You can also override askForArgument to deliever true, then your roller will show a Message box, asking for an argument. Override getMessage to specify the text that is displayed then. For example, the ShadowrunDiceRoller asks for the number of dice. If you don't ask for an argument, the object argument of getResultPanel will always be null, otherwise it will be a String, containing the entered text.
Do what you want, simply extend it