CommandScript.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. package me.km.snuviscript;
  2. import java.util.Arrays;
  3. import me.km.KajetansMod;
  4. import me.km.api.Module;
  5. import me.km.api.ModuleCommand;
  6. import java.util.Collection;
  7. import me.hammerle.snuviscript.code.Script;
  8. import me.km.api.GlobalText;
  9. import me.km.api.Utils;
  10. import me.km.exception.PlayerNotFoundException;
  11. import me.km.permissions.Permissions;
  12. import net.minecraft.command.ICommandSender;
  13. import net.minecraft.entity.player.EntityPlayer;
  14. public class CommandScript extends ModuleCommand
  15. {
  16. public CommandScript(Module m)
  17. {
  18. super("script", m);
  19. super.setDescription("Zeigt alles über Scripts");
  20. super.setUsage("/script für die Hilfe");
  21. super.setPermission(Permissions.SCRIPT);
  22. super.addAlias("s");
  23. }
  24. @SuppressWarnings("unchecked")
  25. @Override
  26. public boolean execute(ICommandSender cs, String[] arg)
  27. {
  28. Module m = this.getModule();
  29. if(arg.length >= 1)
  30. {
  31. switch(arg[0].toLowerCase())
  32. {
  33. case "s":
  34. case "start":
  35. {
  36. if(arg.length >= 2)
  37. {
  38. String[] pars = Arrays.copyOfRange(arg, 1, arg.length);
  39. KajetansMod.scripts.startScript(pars);
  40. return true;
  41. }
  42. break;
  43. }
  44. case "startp":
  45. {
  46. if(arg.length >= 3)
  47. {
  48. try
  49. {
  50. EntityPlayer p = Utils.getPlayerByName(arg[1]);
  51. String[] pars = Arrays.copyOfRange(arg, 2, arg.length);
  52. KajetansMod.scripts.startPlayerScript(p, pars);
  53. }
  54. catch(PlayerNotFoundException ex)
  55. {
  56. m.send(cs, GlobalText.cantFindPlayer(arg[1]));
  57. }
  58. return true;
  59. }
  60. break;
  61. }
  62. case "v":
  63. case "variable":
  64. {
  65. if(arg.length >= 3)
  66. {
  67. try
  68. {
  69. Script sc = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  70. if(sc == null)
  71. {
  72. throw new NumberFormatException();
  73. }
  74. m.send(cs, arg[2] + " = " + sc.getVar(arg[2]).get(sc));
  75. }
  76. catch(NumberFormatException ex)
  77. {
  78. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  79. }
  80. return true;
  81. }
  82. break;
  83. }
  84. case "n":
  85. case "next":
  86. {
  87. if(arg.length >= 2)
  88. {
  89. try
  90. {
  91. Script sc = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  92. if(sc == null)
  93. {
  94. throw new NumberFormatException();
  95. }
  96. sc.run();
  97. }
  98. catch(NumberFormatException ex)
  99. {
  100. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  101. }
  102. return true;
  103. }
  104. break;
  105. }
  106. /*case "c":
  107. case "code":
  108. {
  109. if(arg.length >= 3)
  110. {
  111. try
  112. {
  113. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  114. if(qd == null)
  115. {
  116. throw new NumberFormatException();
  117. }
  118. qd.runCodeLine(ChatManager.colorMessage(Utils.connectSpaces(arg, 2), cs), cs);
  119. }
  120. catch(NumberFormatException ex)
  121. {
  122. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  123. }
  124. return true;
  125. }
  126. break;
  127. }*/
  128. /*case "p":
  129. case "printvars":
  130. {
  131. if(arg.length >= 2)
  132. {
  133. try
  134. {
  135. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  136. if(qd == null)
  137. {
  138. throw new NumberFormatException();
  139. }
  140. cs.sendMessage(new TextComponentString(GlobalText.Spacer()));
  141. qd.getVars().entrySet().stream().filter(e -> arg.length < 3 ||
  142. (e.getKey().startsWith(arg[2]))).forEach(e ->
  143. {
  144. m.send(cs, e.getKey() + " = " + e.getValue());
  145. });
  146. }
  147. catch(NumberFormatException ex)
  148. {
  149. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  150. }
  151. return true;
  152. }
  153. break;
  154. }*/
  155. /*case "pl":
  156. case "printlists":
  157. {
  158. if(arg.length >= 2)
  159. {
  160. try
  161. {
  162. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  163. if(qd == null)
  164. {
  165. throw new NumberFormatException();
  166. }
  167. cs.sendMessage(new TextComponentString(GlobalText.Spacer()));
  168. qd.getVars().entrySet().stream()
  169. .filter(e -> e.getValue() instanceof List)
  170. .filter(e -> arg.length < 3 || (e.getKey().startsWith(arg[2]))).forEach(e ->
  171. {
  172. m.send(cs, e.getKey());
  173. ((List<Object>) e.getValue()).forEach(l -> m.sendListElement(cs, l.toString()));
  174. });
  175. }
  176. catch(NumberFormatException ex)
  177. {
  178. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  179. }
  180. return true;
  181. }
  182. break;
  183. }*/
  184. /*case "pm":
  185. case "printmaps":
  186. {
  187. if(arg.length >= 2)
  188. {
  189. try
  190. {
  191. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  192. if(qd == null)
  193. {
  194. throw new NumberFormatException();
  195. }
  196. cs.sendMessage(new TextComponentString(GlobalText.Spacer()));
  197. qd.getVars().entrySet().stream()
  198. .filter(e -> e.getValue() instanceof Map)
  199. .filter(e -> arg.length < 3 || (e.getKey().startsWith(arg[2]))).forEach(e ->
  200. {
  201. m.send(cs, e.getKey());
  202. ((Map) e.getValue()).forEach((k, v) -> m.sendListElement(cs, k + " | " + v));
  203. });
  204. }
  205. catch(NumberFormatException ex)
  206. {
  207. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  208. }
  209. return true;
  210. }
  211. break;
  212. }*/
  213. case "see":
  214. {
  215. Collection<Script> scripts = KajetansMod.scripts.getSnuviParser().getScripts();
  216. if(scripts.isEmpty())
  217. {
  218. m.send(cs, "Momentan sind keine Scripts aktiv.");
  219. return true;
  220. }
  221. m.send(cs, "Folgende Scripts sind aktiv:");
  222. scripts.forEach(sc ->
  223. {
  224. m.sendHelpListElement(cs, sc.getName(), "(" + sc.getId() + ")");
  225. KajetansMod.scripts.getPlayerList(sc.getId()).forEach(p -> m.sendListElement(cs, p.getName()));
  226. });
  227. return true;
  228. }
  229. case "term":
  230. {
  231. if(arg.length >= 2)
  232. {
  233. try
  234. {
  235. if(arg[1].equals("all"))
  236. {
  237. KajetansMod.scripts.clearPlayerRegistry();
  238. KajetansMod.scripts.getSnuviParser().termAllUnsafe();
  239. m.send(cs, "Alle aktiven Scripts wurden beendet.");
  240. return true;
  241. }
  242. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  243. if(!KajetansMod.scripts.getSnuviParser().termUnsafe(qd))
  244. {
  245. throw new NumberFormatException();
  246. }
  247. m.send(cs, "Das Script '" + qd.getName() + "' wurde beendet.");
  248. }
  249. catch(NumberFormatException ex)
  250. {
  251. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  252. }
  253. catch(Exception ex)
  254. {
  255. m.send(cs, "Beim unsicheren Beenden eines Scripts trat ein Fehler auf.");
  256. ex.printStackTrace();
  257. }
  258. return true;
  259. }
  260. break;
  261. }
  262. }
  263. }
  264. m.send(cs, "/script ...");
  265. m.sendHelpListElement(cs, "start <scripts...>", "Startet ein Script");
  266. m.sendHelpListElement(cs, "startp <player> <scripts...>", "Startet ein Script");
  267. m.sendHelpListElement(cs, "variable <id> <name>", "Zeigt den Wert einer Variable");
  268. m.sendHelpListElement(cs, "printvars <id> [starts]", "Zeigt alle Variablen");
  269. //m.sendHelpListElement(cs, "printlists <id> [starts]", "Zeigt alle Listen");
  270. //m.sendHelpListElement(cs, "printmaps <id> [starts]", "Zeigt alle Maps");
  271. m.sendHelpListElement(cs, "next <id>", "Springt in die nächste Codezeile");
  272. //m.sendHelpListElement(cs, "code <id> <code", "Führt den angegebenen Code aus");
  273. m.sendHelpListElement(cs, "see", "Gibt alle aktiven Scripts aus");
  274. m.sendHelpListElement(cs, "term <id/all>", "Entfernt Scripts aus dem RAM");
  275. return true;
  276. }
  277. }