summaryrefslogtreecommitdiff
path: root/net/nemez/chatapi/click/CallbackMap.java
diff options
context:
space:
mode:
Diffstat (limited to 'net/nemez/chatapi/click/CallbackMap.java')
-rw-r--r--net/nemez/chatapi/click/CallbackMap.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/net/nemez/chatapi/click/CallbackMap.java b/net/nemez/chatapi/click/CallbackMap.java
new file mode 100644
index 0000000..3a8f996
--- /dev/null
+++ b/net/nemez/chatapi/click/CallbackMap.java
@@ -0,0 +1,53 @@
+package net.nemez.chatapi.click;
+
+import java.util.HashMap;
+import java.util.UUID;
+
+import org.bukkit.command.CommandSender;
+
+public class CallbackMap {
+
+ private static HashMap<String, HashMap<Integer, ClickCallback>> map = new HashMap<String, HashMap<Integer, ClickCallback>>();
+
+ protected static int register(UUID uuid, ClickCallback callback) {
+ HashMap<Integer, ClickCallback> playerMap = map.get(uuid.toString());
+ if (playerMap == null) {
+ playerMap = new HashMap<Integer, ClickCallback>();
+ map.put(uuid.toString(), playerMap);
+ }
+ int largestId = 0;
+ for (int i : playerMap.keySet()) {
+ if (i > largestId) {
+ largestId = i;
+ }
+ }
+ int id = largestId + 1;
+ playerMap.put(id, callback);
+ return id;
+ }
+
+ protected static void execute(CommandSender sender, UUID uuid, int id) {
+ HashMap<Integer, ClickCallback> playerMap = map.get(uuid.toString());
+ if (playerMap == null) {
+ return;
+ }
+ ClickCallback cb = playerMap.get(id);
+ if (cb == null) {
+ return;
+ }
+ if (cb.isAsynchronous()) {
+ Thread t = new Thread() {
+ public void run() {
+ cb.execute(sender);
+ }
+ };
+ t.start();
+ }else{
+ cb.execute(sender);
+ }
+ }
+
+ protected static void discard(UUID uuid) {
+ map.remove(uuid.toString());
+ }
+}