CommandDataTools.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. package me.km.datatools;
  2. import me.km.api.GlobalText;
  3. import me.km.api.Module;
  4. import me.km.api.ModuleCommand;
  5. import me.km.api.Utils;
  6. import me.km.chatmanager.ChatManager;
  7. import me.km.nms.NmsUtilities;
  8. import java.util.ArrayList;
  9. import java.util.Arrays;
  10. import java.util.Collection;
  11. import java.util.List;
  12. import me.km.permissions.Permissions;
  13. import me.km.utils.ItemStackUtils;
  14. import net.minecraft.command.ICommandSender;
  15. import net.minecraft.entity.Entity;
  16. import net.minecraft.entity.EntityLiving;
  17. import net.minecraft.entity.player.EntityPlayerMP;
  18. import net.minecraft.inventory.EntityEquipmentSlot;
  19. import net.minecraft.item.ItemStack;
  20. import net.minecraft.server.MinecraftServer;
  21. import net.minecraft.util.math.BlockPos;
  22. import net.minecraft.util.text.TextComponentString;
  23. public class CommandDataTools extends ModuleCommand
  24. {
  25. private final ArrayList<String> first;
  26. public CommandDataTools(Module m)
  27. {
  28. super("datatools", m);
  29. super.setDescription("Spezielle Commands um Daten zu verändern");
  30. super.setUsage("/datatools für die Hilfe");
  31. super.setPermission(Permissions.DATATOOLS);
  32. super.addAlias("dt");
  33. first = new ArrayList<>(Arrays.asList(new String[]
  34. {"print-nbt", "flag", "attribute", "hide-entity", "show-entity", "name-entity", "name-item", "lore-item", "silent-entity"}));
  35. }
  36. @Override
  37. public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos targetPos)
  38. {
  39. List<String> names = new ArrayList<>();
  40. switch (args.length)
  41. {
  42. case 1:
  43. first.stream().filter(e -> e.toLowerCase().startsWith(args[0].toLowerCase())).forEach(e ->
  44. {
  45. names.add(e);
  46. });
  47. break;
  48. case 2:
  49. if(args[0].equals("flag"))
  50. {
  51. Arrays.stream(ItemStackUtils.ItemFlag.values()).filter(e -> e.toString().toLowerCase().startsWith(args[1].toLowerCase())).forEach(e ->
  52. {
  53. names.add(e.toString());
  54. });
  55. }
  56. else if(args[0].equals("attribute"))
  57. {
  58. Arrays.stream(ItemStackUtils.Attribute.values()).filter(e -> e.toString().toLowerCase().startsWith(args[1].toLowerCase())).forEach(e ->
  59. {
  60. names.add(e.toString());
  61. });
  62. }
  63. break;
  64. case 3:
  65. if(args[0].equals("attribute"))
  66. {
  67. Arrays.stream(EntityEquipmentSlot.values()).filter(e -> e.toString().toLowerCase().startsWith(args[2].toLowerCase())).forEach(e ->
  68. {
  69. names.add(e.toString());
  70. });
  71. }
  72. break;
  73. case 5:
  74. if(args[0].equals("attribute"))
  75. {
  76. Arrays.stream(ItemStackUtils.Operation.values()).filter(e -> e.toString().toLowerCase().startsWith(args[4].toLowerCase())).forEach(e ->
  77. {
  78. names.add(e.toString());
  79. });
  80. }
  81. break;
  82. }
  83. return names;
  84. }
  85. @Override
  86. public boolean execute(ICommandSender cs, String[] arg)
  87. {
  88. if(!(cs instanceof EntityPlayerMP))
  89. {
  90. this.getModule().send(cs, GlobalText.onlyPlayer());
  91. return true;
  92. }
  93. EntityPlayerMP p = (EntityPlayerMP) cs;
  94. Module m = this.getModule();
  95. if(arg.length >= 1)
  96. {
  97. switch (arg[0])
  98. {
  99. case "print-nbt":
  100. {
  101. Entity ent = Utils.getTargetedEntity(p, 3, Entity.class);
  102. if(ent == null)
  103. {
  104. m.send(cs, "Du musst auf ein Objekt gerichtet sein.");
  105. return true;
  106. }
  107. this.getModule().send(cs, GlobalText.Spacer());
  108. this.getModule().send(cs, "NBT-Daten " + ent.getName());
  109. String nbt = NmsUtilities.getNbtString(ent);
  110. cs.sendMessage(new TextComponentString(NmsUtilities.highlightNbtSyntax(nbt)));
  111. NmsUtilities.sendCopyableText(p, nbt);
  112. return true;
  113. }
  114. case "test":
  115. {
  116. EntityLiving ent = Utils.getTargetedEntity(p, 3, EntityLiving.class);
  117. if(ent == null)
  118. {
  119. m.send(cs, "Du musst auf ein Objekt gerichtet sein.");
  120. return true;
  121. }
  122. NmsUtilities.canDestroyBlocks((EntityLiving) ent);
  123. return true;
  124. }
  125. case "flag":
  126. {
  127. if(arg.length < 2)
  128. {
  129. break;
  130. }
  131. ItemStack stack = p.getHeldItemMainhand();
  132. if(stack == ItemStack.EMPTY)
  133. {
  134. m.send(cs, "Du musst ein Item in der Hand halten.");
  135. return true;
  136. }
  137. try
  138. {
  139. ItemStackUtils.ItemFlag flag = ItemStackUtils.ItemFlag.valueOf(arg[1].toUpperCase());
  140. ItemStackUtils.addItemFlag(stack, flag);
  141. m.send(cs, "Die Flag wurde hinzugefügt.");
  142. }
  143. catch(IllegalArgumentException ex)
  144. {
  145. m.send(cs, "Die gegebene Flag existiert nicht.");
  146. }
  147. return true;
  148. }
  149. case "attribute":
  150. {
  151. ItemStack stack = p.getHeldItemMainhand();
  152. if(stack == ItemStack.EMPTY)
  153. {
  154. m.send(cs, "Du musst ein Item in der Hand halten.");
  155. return true;
  156. }
  157. if(arg.length < 5)
  158. {
  159. break;
  160. }
  161. try
  162. {
  163. ItemStackUtils.addAttribute(stack, ItemStackUtils.Attribute.valueOf(arg[1]),
  164. EntityEquipmentSlot.valueOf(arg[2]), Double.parseDouble(arg[3]), ItemStackUtils.Operation.valueOf(arg[4]));
  165. m.send(cs, "Das Attribut wurde hinzugefügt.");
  166. }
  167. catch(NumberFormatException ex)
  168. {
  169. m.send(cs, "Die angegebene Zahl ist ungültig.");
  170. }
  171. catch(IllegalArgumentException ex)
  172. {
  173. m.send(cs, "Ein angegebener Enum existiert nicht.");
  174. }
  175. return true;
  176. }
  177. case "hide-entity":
  178. {
  179. Entity ent = Utils.getTargetedEntity(p, 3, Entity.class);
  180. if(ent == null)
  181. {
  182. m.send(cs, "Du musst auf ein Objekt gerichtet sein.");
  183. return true;
  184. }
  185. ent.setInvisible(true);
  186. m.send(cs, "Das Objekt sollte nun unsichtbar sein.");
  187. return true;
  188. }
  189. case "show-entity":
  190. Collection<Entity> ents = Utils.getNearbyEntities(p.getEntityWorld(), p.getPositionVector(), 3, Entity.class);
  191. if(ents.isEmpty())
  192. {
  193. m.send(cs, "Du musst mindestens ein Objekt in deiner Nähe haben.");
  194. return true;
  195. }
  196. ents.stream().forEach(ent -> ent.setInvisible(false));
  197. m.send(cs, "Alle Objekte in deiner Nähe sollten wieder sichtbar sein.");
  198. return true;
  199. case "silent-entity":
  200. {
  201. Entity ent = Utils.getTargetedEntity(p, 3, Entity.class);
  202. if(ent == null)
  203. {
  204. m.send(cs, "Du musst auf ein Objekt gerichtet sein.");
  205. return true;
  206. }
  207. ent.setSilent(true);
  208. m.send(cs, "Das Objekt sollte nun still sein.");
  209. return true;
  210. }
  211. case "name-entity":
  212. {
  213. if(arg.length < 2)
  214. {
  215. break;
  216. }
  217. Entity ent = Utils.getTargetedEntity(p, 3, Entity.class);
  218. if(ent == null)
  219. {
  220. m.send(cs, "Du musst auf ein Objekt gerichtet sein.");
  221. return true;
  222. }
  223. String s = ChatManager.colorMessage(Utils.connectSpaces(arg, 1), p);
  224. ent.setCustomNameTag(s);
  225. m.send(cs, "Das Objekt träg nun den Namen '" + s + "§r'.");
  226. return true;
  227. }
  228. case "name-item":
  229. {
  230. if(arg.length < 2)
  231. {
  232. break;
  233. }
  234. ItemStack hand = p.getHeldItemMainhand();
  235. if(hand == ItemStack.EMPTY)
  236. {
  237. m.send(cs, "Du musst ein Item in der Hand halten.");
  238. return true;
  239. }
  240. String s = ChatManager.colorMessage(Utils.connectSpaces(arg, 1), p);
  241. hand.setStackDisplayName(s);
  242. m.send(cs, "Das Item trägt nun den Namen '" + s + "§r'.");
  243. return true;
  244. }
  245. case "lore-item":
  246. if(arg.length < 3)
  247. {
  248. break;
  249. }
  250. ItemStack hand = p.getHeldItemMainhand();
  251. if(hand == ItemStack.EMPTY)
  252. {
  253. m.send(cs, "Du musst ein Item in der Hand halten.");
  254. return true;
  255. }
  256. int line;
  257. try
  258. {
  259. line = Integer.parseInt(arg[1]);
  260. if(line < 0)
  261. {
  262. throw new NumberFormatException();
  263. }
  264. }
  265. catch(NumberFormatException ex)
  266. {
  267. m.send(cs, GlobalText.noNaturalNumber());
  268. return true;
  269. }
  270. ItemStackUtils.addLore(hand, ChatManager.colorMessage(Utils.connectSpaces(arg, 2), p), line);
  271. m.send(cs, "Die neue Lore wurde hinzugefügt.");
  272. return true;
  273. }
  274. }
  275. m.send(cs, "/datatools ...");
  276. m.sendHelpListElement(cs, "print-nbt", "Gibt Information über eine Entity");
  277. m.sendHelpListElement(cs, "flag <flag>", "Fügt dem ItemStack eine Flag hinzu");
  278. m.sendHelpListElement(cs, "attribute <a> <slot> <d> <op>", "Fügt ein Attribut hinzu");
  279. m.sendHelpListElement(cs, "hide-entity", "Macht eine Entitiy unsichtbar");
  280. m.sendHelpListElement(cs, "show-entity", "Macht umliegende Entities sichtbar");
  281. m.sendHelpListElement(cs, "silent-entity", "Macht eine Entitiy still");
  282. m.sendHelpListElement(cs, "name-entity <name>", "Setzt einen Namen für eine Entity");
  283. m.sendHelpListElement(cs, "name-item <name>", "Setzt einen Namen für ein Item");
  284. m.sendHelpListElement(cs, "lore-item <line> <lore>", "Setzt eine Lore für ein Item");
  285. return true;
  286. }
  287. }