Ver Fonte

prevent item stack from being null in snuvi event, possibility to ignore
sending of vanilla command help

Kajetan Johannes Hammerle há 4 anos atrás
pai
commit
0fb1cb9a10

+ 18 - 1
src/main/java/me/km/permissions/ModCommandManager.java

@@ -32,6 +32,7 @@ public class ModCommandManager extends Commands {
     private final Scripts scripts;
 
     private final ArrayList<CommandNode> customNodes = new ArrayList<>();
+    private final HashSet<String> ignoredCommands = new HashSet<>();
 
     public ModCommandManager(boolean isDedicatedServer, PermissionManager perms, ScriptEvents events, Scripts scripts, ISnuviScheduler scheduler) {
         super(isDedicatedServer);
@@ -48,12 +49,25 @@ public class ModCommandManager extends Commands {
         this.perms = perms;
         this.events = events;
         this.scripts = scripts;
+        
+        // forge command which fails ...
+        ignoredCommands.add("config"); 
     }
-
+    
     public void clearCustomNodes() {
         customNodes.clear();
     }
 
+    public void addIgnoredCommands(String command) {
+        ignoredCommands.add(command);
+    }
+
+    public void clearIgnoredCommands() {
+        ignoredCommands.clear();
+        // forge command which fails ...
+        ignoredCommands.add("config"); 
+    }
+
     public void addCustomNodes(CommandNode node) {
         customNodes.add(node);
     }
@@ -190,6 +204,9 @@ public class ModCommandManager extends Commands {
             CommandSource source,
             Map<CommandNode<CommandSource>, CommandNode<ISuggestionProvider>> map) {
         for(CommandNode<CommandSource> commandnode : node.getChildren()) {
+            if(first && ignoredCommands.contains(commandnode.getName())) {
+                continue;
+            }
             if((first && perms.hasPermission(source, commandnode.getName()) || (!first && commandnode.canUse(source)))) {
                 ArgumentBuilder<ISuggestionProvider, ?> argumentbuilder = (ArgumentBuilder) commandnode.createBuilder();
                 argumentbuilder.requires(a -> true);

+ 9 - 0
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -173,6 +173,15 @@ public class MinecraftFunctions {
         // ---------------------------------------------------------------------
         // Command-library  
         // ---------------------------------------------------------------------
+        sm.registerFunction("command.addignored", (sc, in) -> {
+            commands.addIgnoredCommands(in[0].getString(sc));
+            return Void.TYPE;
+        });
+        sm.registerFunction("command.clearignored", (sc, in) -> {
+            commands.clearIgnoredCommands();
+            return Void.TYPE;
+        });
+        sm.registerFunction("command.newhelp", (sc, in) -> Commands.literal(in[0].getString(sc)).requires(p -> perms.hasPermission(p, in[1].getString(sc))));
         sm.registerFunction("command.newhelp", (sc, in) -> Commands.literal(in[0].getString(sc)).requires(p -> perms.hasPermission(p, in[1].getString(sc))));
         sm.registerFunction("command.newhelpliteral", (sc, in) -> {
             LiteralArgumentBuilder<CommandSource> arg = Commands.literal(in[0].getString(sc));

+ 7 - 2
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -56,7 +56,7 @@ public class ScriptEvents {
     }
 
     private static void setItem(Script sc, ItemStack stack) {
-        sc.setVar("item_stack", stack);
+        sc.setVar("item", stack);
     }
 
     private final Scripts scripts;
@@ -496,7 +496,12 @@ public class ScriptEvents {
             setLivingEntity(sc, e.getEntityLiving());
             setItem(sc, e.getItem());
         }, (sc) -> {
-            handleVar(sc, "item_use_finish", "item", v -> e.setResultStack((ItemStack) v.get(sc)));
+            handleVar(sc, "item_use_finish", "item", v -> {
+                ItemStack stack = (ItemStack) v.get(sc);
+                if(stack != null) {
+                    e.setResultStack(stack);
+                }
+            });
         });
     }