Browse Source

command registry event

Kajetan Johannes Hammerle 5 years ago
parent
commit
7f8c4cbd5e

+ 7 - 0
src/main/java/me/kcm/command/ICommandManager.java

@@ -37,4 +37,11 @@ public interface ICommandManager
      * @param command the command
      */
     public void printMissingPermission(ICommandSender cs, ICommand command);
+    
+    /** Called if a command is registered from a registered domain.
+     * 
+     * @param command the command
+     * @param domain a registered command domain
+     */
+    public void onRegisterCommand(ICommand command, String domain);
 }

+ 39 - 0
src/main/java/me/kcm/command/ModServerCommandManager.java

@@ -1,6 +1,7 @@
 package me.kcm.command;
 
 import java.util.Collections;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
@@ -17,6 +18,7 @@ import net.minecraftforge.event.CommandEvent;
 
 public class ModServerCommandManager extends ServerCommandManager
 {
+    private LinkedList<String> events = new LinkedList<>();
     private ICommandManager manager;
     
     public ModServerCommandManager(MinecraftServer serverIn) 
@@ -46,6 +48,11 @@ public class ModServerCommandManager extends ServerCommandManager
             public void printMissingPermission(ICommandSender cs, ICommand command) 
             {
             }
+
+            @Override
+            public void onRegisterCommand(ICommand command, String domain)
+            {
+            }
         };
     }
     
@@ -59,6 +66,11 @@ public class ModServerCommandManager extends ServerCommandManager
         this.manager = manager;
     }
     
+    public void registerRegistryEvent(String s)
+    {
+        events.add(s);
+    }
+    
     @Override
     public void notifyListener(ICommandSender cs, ICommand command, int flags, String key, Object... args)
     {
@@ -155,4 +167,31 @@ public class ModServerCommandManager extends ServerCommandManager
                     .map(e -> e.getValue())
                     .collect(Collectors.toList());
     }
+
+    @Override
+    public ICommand registerCommand(ICommand command)
+    {
+        String s = null;
+        out: for(StackTraceElement e : Thread.currentThread().getStackTrace())
+        {
+            String name = e.getClassName();
+            if(events == null)
+            {
+                events = new LinkedList<>();
+            }
+            for(String start : events)
+            {
+                if(name.startsWith(start))
+                {
+                    s = name;
+                    break out;
+                }
+            }
+        }
+        if(s != null)
+        {
+            manager.onRegisterCommand(command, s);
+        }
+        return super.registerCommand(command);
+    }
 }