CommandCommands.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package me.km.snuviscript.commands;
  2. import com.mojang.brigadier.arguments.*;
  3. import com.mojang.brigadier.builder.*;
  4. import me.hammerle.snuviscript.code.ScriptManager;
  5. import me.km.permissions.ModCommandManager;
  6. import me.km.permissions.Permissions;
  7. import me.km.snuviscript.Scripts;
  8. import net.minecraft.command.CommandSource;
  9. import net.minecraft.command.Commands;
  10. import net.minecraft.command.arguments.*;
  11. import net.minecraft.server.MinecraftServer;
  12. public class CommandCommands {
  13. public static void registerFunctions(ScriptManager sm, Scripts scripts, Permissions perms,
  14. MinecraftServer server, ModCommandManager commands) {
  15. sm.registerConsumer("command.addignored", (sc, in) -> commands.addIgnoredCommands(in[0].getString(sc)));
  16. sm.registerConsumer("command.clearignored", (sc, in) -> commands.clearIgnoredCommands());
  17. sm.registerFunction("command.newhelp", (sc, in) -> {
  18. final String perm = in[1].getString(sc);
  19. return Commands.literal(in[0].getString(sc)).requires(p -> perms.has(p, perm));
  20. });
  21. sm.registerFunction("command.newhelpliteral", (sc, in) -> {
  22. LiteralArgumentBuilder<CommandSource> arg = Commands.literal(in[0].getString(sc));
  23. if(in.length >= 2) {
  24. final String perm = in[1].getString(sc);
  25. arg.requires(p -> perms.has(p, perm));
  26. }
  27. return arg;
  28. });
  29. sm.registerFunction("command.newhelpbool", (sc, in) -> {
  30. RequiredArgumentBuilder<CommandSource, Boolean> arg = Commands.argument(in[0].getString(sc), BoolArgumentType.bool());
  31. if(in.length >= 2) {
  32. final String perm = in[1].getString(sc);
  33. arg.requires(p -> perms.has(p, perm));
  34. }
  35. return arg;
  36. });
  37. sm.registerFunction("command.newhelpdouble", (sc, in) -> {
  38. double min = in[1].getDouble(sc);
  39. double max = in[2].getDouble(sc);
  40. RequiredArgumentBuilder<CommandSource, Double> arg = Commands.argument(in[0].getString(sc), DoubleArgumentType.doubleArg(min, max));
  41. if(in.length >= 4) {
  42. final String perm = in[3].getString(sc);
  43. arg.requires(p -> perms.has(p, perm));
  44. }
  45. return arg;
  46. });
  47. sm.registerFunction("command.newhelpfloat", (sc, in) -> {
  48. float min = in[1].getFloat(sc);
  49. float max = in[2].getFloat(sc);
  50. RequiredArgumentBuilder<CommandSource, Float> arg = Commands.argument(in[0].getString(sc), FloatArgumentType.floatArg(min, max));
  51. if(in.length >= 4) {
  52. final String perm = in[3].getString(sc);
  53. arg.requires(p -> perms.has(p, perm));
  54. }
  55. return arg;
  56. });
  57. sm.registerFunction("command.newhelpint", (sc, in) -> {
  58. int min = in[1].getInt(sc);
  59. int max = in[2].getInt(sc);
  60. RequiredArgumentBuilder<CommandSource, Integer> arg = Commands.argument(in[0].getString(sc), IntegerArgumentType.integer(min, max));
  61. if(in.length >= 4) {
  62. final String perm = in[3].getString(sc);
  63. arg.requires(p -> perms.has(p, perm));
  64. }
  65. return arg;
  66. });
  67. sm.registerFunction("command.newhelplong", (sc, in) -> {
  68. long min = in[1].getLong(sc);
  69. long max = in[2].getLong(sc);
  70. RequiredArgumentBuilder<CommandSource, Long> arg = Commands.argument(in[0].getString(sc), LongArgumentType.longArg(min, max));
  71. if(in.length >= 4) {
  72. final String perm = in[3].getString(sc);
  73. arg.requires(p -> perms.has(p, perm));
  74. }
  75. return arg;
  76. });
  77. sm.registerFunction("command.newhelpstring", (sc, in) -> {
  78. RequiredArgumentBuilder<CommandSource, String> arg;
  79. if(in[1].getBoolean(sc)) {
  80. arg = Commands.argument(in[0].getString(sc), StringArgumentType.greedyString());
  81. } else {
  82. arg = Commands.argument(in[0].getString(sc), StringArgumentType.string());
  83. }
  84. if(in.length >= 3) {
  85. final String perm = in[2].getString(sc);
  86. arg.requires(p -> perms.has(p, perm));
  87. }
  88. return arg;
  89. });
  90. sm.registerFunction("command.newhelpspecial", (sc, in) -> {
  91. RequiredArgumentBuilder<CommandSource, ArgumentType> arg = null;
  92. String name = in[0].getString(sc);
  93. switch(name) {
  94. case "Item":
  95. arg = Commands.argument(in[1].getString(sc), (ArgumentType) ItemArgument.item());
  96. break;
  97. case "Block":
  98. arg = Commands.argument(in[1].getString(sc), (ArgumentType) BlockStateArgument.blockState());
  99. break;
  100. case "Potion":
  101. arg = Commands.argument(in[1].getString(sc), (ArgumentType) PotionArgument.mobEffect());
  102. break;
  103. case "Enchantment":
  104. arg = Commands.argument(in[1].getString(sc), (ArgumentType) EnchantmentArgument.enchantment());
  105. break;
  106. case "Player":
  107. arg = Commands.argument(in[1].getString(sc), (ArgumentType) EntityArgument.player());
  108. break;
  109. default:
  110. throw new IllegalArgumentException(String.format("'%s' is not a valid special help", name));
  111. }
  112. if(in.length >= 3) {
  113. final String perm = in[2].getString(sc);
  114. arg.requires(p -> perms.has(p, perm));
  115. }
  116. return arg;
  117. });
  118. sm.registerConsumer("command.sendhelp", (sc, in) -> {
  119. server.getPlayerList().getPlayers().forEach(p -> commands.send(p));
  120. });
  121. sm.registerConsumer("command.addhelpalias", (sc, in) -> {
  122. ((ArgumentBuilder) in[0].get(sc)).redirect(((ArgumentBuilder) in[1].get(sc)).build());
  123. });
  124. sm.registerConsumer("command.addhelpchild", (sc, in) -> {
  125. ((ArgumentBuilder) in[0].get(sc)).then(((ArgumentBuilder) in[1].get(sc)).build());
  126. });
  127. sm.registerConsumer("command.addhelp", (sc, in) -> {
  128. commands.addCustomNode(((LiteralArgumentBuilder<CommandSource>) in[0].get(sc)).build());
  129. });
  130. sm.registerConsumer("command.clearhelp", (sc, in) -> commands.clearCustomNodes());
  131. sm.registerConsumer("command.add", (sc, in) -> scripts.registerScriptCommand(in[0].getString(sc)));
  132. sm.registerConsumer("command.remove", (sc, in) -> scripts.unregisterScriptCommand(in[0].getString(sc)));
  133. sm.registerFunction("command.exists", (sc, in) -> scripts.isRegisteredScriptCommand(in[0].getString(sc)));
  134. sm.registerConsumer("command.clear", (sc, in) -> scripts.clearScriptCommands());
  135. }
  136. }