Well I might aswell just explain it.
I rewrote my old one as I wasn't very interested in it and it looked fairly bland.
So I rewrote it and these are its features (Soon to be I just gotta finish up):
- XML Loading - Seperate Files
- MultipleOptions
- Stores in a HashMap
- Dialogues are stored in a List
- Adding Items
- Teleporting
- Deleting Items
- Graphics
- Emotes
- Continous
- Show Interface
- Many more...
And now to the files:
First we have the DialogueManager, I have yet to finish this as at the moment I basically use it just for the loading of the dialogues 
Code:
package com.the_acheron.util;
import java.io.File;
import java.io.FileInputStream;
import java.util.LinkedList;
import java.util.List;
import com.the_acheron.model.Dialogue;
import com.the_acheron.util.log.Logger;
public class DialogueManager {
private static List<Dialogue> dialogues = new LinkedList<Dialogue>();
public static void openDialogue(int dialogueId) {
Dialogue def = dialogues.get(dialogueId);
if (def != null) {
}
}
public static void load() throws Exception {
List<Dialogue> defs = new LinkedList<Dialogue>();
File directory = new File("./data/dialogues");
String[] files = directory.list();
for (String loc : files) {
if (loc.endsWith(".xml")) {
Dialogue def = (Dialogue) XStreamUtil.getXStream().fromXML(
new FileInputStream("./data/dialogues/" + loc));
defs.add(def);
System.out.println("Def: "
+ def.getActionsLinked().get(20).getActionButtonId());
}
}
dialogues.addAll(defs);
Logger.getInstance().info(
"Loaded " + dialogues.size() + " dialogue definitions.");
}
}
Ignore the System.out.println message. 
The Dialogue Class:
This is the main part of the DialogueSystem without this it wouldn't work.
Code:
package com.the_acheron.model;
import java.util.HashMap;
import java.util.Map;
public class Dialogue {
/**
* Where Object[][] is the todo action and Integer is the id of the action.
* With a maximum of 10 actions.
*/
private Map<Integer, DialogueConfiguration> actionsLinked = new HashMap<Integer, DialogueConfiguration>(
10);
private String[] dialogueStrings;
private int chatboxId;
private Integer[] dialogueIntegers;
public void setDialogueStrings(String[] dialogueStrings) {
this.dialogueStrings = dialogueStrings;
}
public String[] getDialogueStrings() {
return dialogueStrings;
}
public void setDialogueIntegers(Integer[] dialogueIntegers) {
this.dialogueIntegers = dialogueIntegers;
}
public Integer[] getDialogueIntegers() {
return dialogueIntegers;
}
public void setChatboxId(int chatboxId) {
this.chatboxId = chatboxId;
}
public int getChatboxId() {
return chatboxId;
}
public void setActionsLinked(
Map<Integer, DialogueConfiguration> actionsLinked) {
this.actionsLinked = actionsLinked;
}
public Map<Integer, DialogueConfiguration> getActionsLinked() {
return actionsLinked;
}
}
DialogueAction enum, speaks for itself:
Code:
package com.the_acheron.model;
public enum DialogueAction {
TELEPORT, CONTINOUS, ADD_ITEM, DELETE_ITEM, CLOSE, SHOW_INTERFACE, EMOTE, GRAPHIC
}
Finally, DialogueConfiguration class:
Code:
package com.the_acheron.model;
public class DialogueConfiguration {
private DialogueAction[] actionsToBeCompleted;
private Item[] itemsToAdd;
private Location[] teleportLocation;
private int actionButtonId;
private boolean continousDialogue;
private int nextDialogueId;
public void setActionsToBeCompleted(DialogueAction[] actionsToBeCompleted) {
this.actionsToBeCompleted = actionsToBeCompleted;
}
public DialogueAction[] getActionsToBeCompleted() {
return actionsToBeCompleted;
}
public void setItemsToAdd(Item[] itemsToAdd) {
this.itemsToAdd = itemsToAdd;
}
public Item[] getItemsToAdd() {
return itemsToAdd;
}
public void setTeleportLocation(Location[] teleportLocation) {
this.teleportLocation = teleportLocation;
}
public Location[] getTeleportLocation() {
return teleportLocation;
}
public void setActionButtonId(int actionButtonId) {
this.actionButtonId = actionButtonId;
}
public int getActionButtonId() {
return actionButtonId;
}
public void setContinousDialogue(boolean continousDialogue) {
this.continousDialogue = continousDialogue;
}
public boolean isContinousDialogue() {
return continousDialogue;
}
public void setNextDialogueId(int nextDialogueId) {
this.nextDialogueId = nextDialogueId;
}
public int getNextDialogueId() {
return nextDialogueId;
}
}
Any questions? 
Also suggest what to do next...
Edit:
An example XML File:
Code:
<dialogue>
<actionsLinked>
<hashMap>
<int>20</int>
<dialogueConfiguration>
<actionsToBeCompleted>
<dialogueAction>ADD_ITEM</dialogueAction>
<dialogueAction>TELEPORT</dialogueAction>
<item>
<id>995</id>
<amount>100</amount>
</item>
<location>
<x>3222</x>
<y>3222</y>
<z>0</z>
</location>
</actionsToBeCompleted>
<actionButtonId>20</actionButtonId>
</dialogueConfiguration>
</hashMap>
</actionsLinked>
</dialogue>