CommandScript.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. package me.km.snuviscript;
  2. import java.util.Arrays;
  3. import me.km.KajetansMod;
  4. import me.km.module.Module;
  5. import me.km.module.ModuleCommand;
  6. import java.util.Collection;
  7. import me.hammerle.snuviscript.code.Script;
  8. import me.hammerle.snuviscript.variable.Variable;
  9. import me.km.utils.Utils;
  10. import me.km.exception.PlayerNotFoundException;
  11. import net.minecraft.command.ICommandSender;
  12. import net.minecraft.entity.player.EntityPlayer;
  13. import net.minecraft.entity.player.EntityPlayerMP;
  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("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, "Cannot find player '" + 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. Variable var = sc.getVar(arg[2]);
  75. if(var != null)
  76. {
  77. m.send(cs, arg[2] + " = " + var.get(sc));
  78. }
  79. else
  80. {
  81. m.send(cs, arg[2] + " = null");
  82. }
  83. }
  84. catch(NumberFormatException ex)
  85. {
  86. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  87. }
  88. return true;
  89. }
  90. break;
  91. }
  92. case "n":
  93. case "next":
  94. {
  95. if(arg.length >= 2)
  96. {
  97. try
  98. {
  99. Script sc = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  100. if(sc == null)
  101. {
  102. throw new NumberFormatException();
  103. }
  104. sc.run();
  105. }
  106. catch(NumberFormatException ex)
  107. {
  108. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  109. }
  110. return true;
  111. }
  112. break;
  113. }
  114. /*case "c":
  115. case "code":
  116. {
  117. if(arg.length >= 3)
  118. {
  119. try
  120. {
  121. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  122. if(qd == null)
  123. {
  124. throw new NumberFormatException();
  125. }
  126. qd.runCodeLine(ChatManager.colorMessage(Utils.connectSpaces(arg, 2), cs), cs);
  127. }
  128. catch(NumberFormatException ex)
  129. {
  130. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  131. }
  132. return true;
  133. }
  134. break;
  135. }*/
  136. /*case "p":
  137. case "printvars":
  138. {
  139. if(arg.length >= 2)
  140. {
  141. try
  142. {
  143. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  144. if(qd == null)
  145. {
  146. throw new NumberFormatException();
  147. }
  148. cs.sendMessage(new TextComponentString(GlobalText.Spacer()));
  149. qd.getVars().entrySet().stream().filter(e -> arg.length < 3 ||
  150. (e.getKey().startsWith(arg[2]))).forEach(e ->
  151. {
  152. m.send(cs, e.getKey() + " = " + e.getValue());
  153. });
  154. }
  155. catch(NumberFormatException ex)
  156. {
  157. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  158. }
  159. return true;
  160. }
  161. break;
  162. }*/
  163. /*case "pl":
  164. case "printlists":
  165. {
  166. if(arg.length >= 2)
  167. {
  168. try
  169. {
  170. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  171. if(qd == null)
  172. {
  173. throw new NumberFormatException();
  174. }
  175. cs.sendMessage(new TextComponentString(GlobalText.Spacer()));
  176. qd.getVars().entrySet().stream()
  177. .filter(e -> e.getValue() instanceof List)
  178. .filter(e -> arg.length < 3 || (e.getKey().startsWith(arg[2]))).forEach(e ->
  179. {
  180. m.send(cs, e.getKey());
  181. ((List<Object>) e.getValue()).forEach(l -> m.sendListElement(cs, l.toString()));
  182. });
  183. }
  184. catch(NumberFormatException ex)
  185. {
  186. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  187. }
  188. return true;
  189. }
  190. break;
  191. }*/
  192. /*case "pm":
  193. case "printmaps":
  194. {
  195. if(arg.length >= 2)
  196. {
  197. try
  198. {
  199. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  200. if(qd == null)
  201. {
  202. throw new NumberFormatException();
  203. }
  204. cs.sendMessage(new TextComponentString(GlobalText.Spacer()));
  205. qd.getVars().entrySet().stream()
  206. .filter(e -> e.getValue() instanceof Map)
  207. .filter(e -> arg.length < 3 || (e.getKey().startsWith(arg[2]))).forEach(e ->
  208. {
  209. m.send(cs, e.getKey());
  210. ((Map) e.getValue()).forEach((k, v) -> m.sendListElement(cs, k + " | " + v));
  211. });
  212. }
  213. catch(NumberFormatException ex)
  214. {
  215. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  216. }
  217. return true;
  218. }
  219. break;
  220. }*/
  221. case "see":
  222. {
  223. Collection<Script> scripts = KajetansMod.scripts.getSnuviParser().getScripts();
  224. if(scripts.isEmpty())
  225. {
  226. m.send(cs, "Momentan sind keine Scripts aktiv.");
  227. return true;
  228. }
  229. m.send(cs, "Folgende Scripts sind aktiv:");
  230. scripts.forEach(sc ->
  231. {
  232. m.sendHelpListElement(cs, sc.getSimpleName(), "(" + sc.getId() + ")");
  233. KajetansMod.scripts.getPlayerList(sc.getId()).forEach(uuid ->
  234. {
  235. EntityPlayerMP p = KajetansMod.server.getPlayerList().getPlayerByUUID(uuid);
  236. m.sendListElement(cs, p == null ? "null" : p.getName());
  237. });
  238. });
  239. return true;
  240. }
  241. case "term":
  242. {
  243. if(arg.length >= 2)
  244. {
  245. try
  246. {
  247. if(arg[1].equals("all"))
  248. {
  249. KajetansMod.scripts.clearPlayerRegistry();
  250. KajetansMod.scripts.getSnuviParser().termAllUnsafe();
  251. m.send(cs, "Alle aktiven Scripts wurden beendet.");
  252. return true;
  253. }
  254. Script qd = KajetansMod.scripts.getSnuviParser().getScript(Integer.parseInt(arg[1]));
  255. if(!KajetansMod.scripts.getSnuviParser().termUnsafe(qd))
  256. {
  257. throw new NumberFormatException();
  258. }
  259. m.send(cs, "Das Script '" + qd.getName() + "' wurde beendet.");
  260. }
  261. catch(NumberFormatException ex)
  262. {
  263. m.send(cs, "'" + arg[1] + "' ist keine gültige ID.");
  264. }
  265. catch(Exception ex)
  266. {
  267. m.send(cs, "Beim unsicheren Beenden eines Scripts trat ein Fehler auf.");
  268. ex.printStackTrace();
  269. }
  270. return true;
  271. }
  272. break;
  273. }
  274. }
  275. }
  276. m.send(cs, "/script ...");
  277. m.sendHelpListElement(cs, "start <scripts...>", "Startet ein Script");
  278. m.sendHelpListElement(cs, "startp <player> <scripts...>", "Startet ein Script");
  279. m.sendHelpListElement(cs, "variable <id> <name>", "Zeigt den Wert einer Variable");
  280. //m.sendHelpListElement(cs, "printvars <id> [starts]", "Zeigt alle Variablen");
  281. //m.sendHelpListElement(cs, "printlists <id> [starts]", "Zeigt alle Listen");
  282. //m.sendHelpListElement(cs, "printmaps <id> [starts]", "Zeigt alle Maps");
  283. m.sendHelpListElement(cs, "next <id>", "Springt in die nächste Codezeile");
  284. //m.sendHelpListElement(cs, "code <id> <code", "Führt den angegebenen Code aus");
  285. m.sendHelpListElement(cs, "see", "Gibt alle aktiven Scripts aus");
  286. m.sendHelpListElement(cs, "term <id/all>", "Entfernt Scripts aus dem RAM");
  287. return true;
  288. }
  289. }