CommandVillager.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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 java.util.ArrayList;
  7. import java.util.Arrays;
  8. import java.util.List;
  9. import me.km.permissions.Permissions;
  10. import me.km.inventory.EntityInventory;
  11. import me.km.inventory.InventoryUtils;
  12. import net.minecraft.command.ICommandSender;
  13. import net.minecraft.entity.SharedMonsterAttributes;
  14. import net.minecraft.entity.passive.EntityVillager;
  15. import net.minecraft.entity.player.EntityPlayerMP;
  16. import net.minecraft.server.MinecraftServer;
  17. import net.minecraft.util.math.BlockPos;
  18. import net.minecraft.village.MerchantRecipe;
  19. import net.minecraft.village.MerchantRecipeList;
  20. import net.minecraft.world.World;
  21. public class CommandVillager extends ModuleCommand
  22. {
  23. private final ArrayList<String> vil;
  24. public CommandVillager(Module m)
  25. {
  26. super("villager", m);
  27. super.setDescription("Spezielle Commands für Villager");
  28. super.setUsage("/villager für die Hilfe");
  29. super.setPermission(Permissions.VILLAGER);
  30. super.addAlias("vi");
  31. vil = new ArrayList<>(Arrays.asList(new String[] {"inv", "trades", "spawn", "child"}));
  32. }
  33. @Override
  34. public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos targetPos)
  35. {
  36. List<String> names = new ArrayList<>();
  37. if(args.length == 1)
  38. {
  39. vil.stream().filter(e -> e.toLowerCase().startsWith(args[0].toLowerCase())).forEach(e ->
  40. {
  41. names.add(e);
  42. });
  43. return names;
  44. }
  45. return names;
  46. }
  47. @Override
  48. public boolean execute(ICommandSender cs, String[] arg)
  49. {
  50. if(!(cs instanceof EntityPlayerMP))
  51. {
  52. this.getModule().send(cs, GlobalText.onlyPlayer());
  53. return true;
  54. }
  55. EntityPlayerMP p = (EntityPlayerMP) cs;
  56. Module m = this.getModule();
  57. if(arg.length >= 1)
  58. {
  59. switch (arg[0])
  60. {
  61. case "inv":
  62. {
  63. EntityVillager v = Utils.getTargetedEntity(p, 3, EntityVillager.class);
  64. if(v == null)
  65. {
  66. m.send(cs, "Du musst auf einen Villager gerichtet sein.");
  67. return true;
  68. }
  69. p.displayGUIChest(InventoryUtils.getInventory(v));
  70. return true;
  71. }
  72. case "trades":
  73. {
  74. EntityVillager v = Utils.getTargetedEntity(p, 3, EntityVillager.class);
  75. if(v == null)
  76. {
  77. m.send(cs, "Du musst auf einen Villager gerichtet sein.");
  78. return true;
  79. }
  80. EntityInventory inv = new EntityInventory("ChangeTrades - " + v.getEntityId(), 54, v);
  81. int i = 0;
  82. MerchantRecipeList list = v.getRecipes(null);
  83. if(list != null)
  84. {
  85. for(MerchantRecipe mr : list)
  86. {
  87. inv.setInventorySlotContents(i, mr.getItemToSell().copy());
  88. inv.setInventorySlotContents(i + 9, mr.getItemToBuy().copy());
  89. inv.setInventorySlotContents(i + 18, mr.getSecondItemToBuy().copy());
  90. i++;
  91. if(i >= 9)
  92. {
  93. i = 27;
  94. }
  95. if(i >= 36)
  96. {
  97. break;
  98. }
  99. }
  100. }
  101. p.displayGUIChest(inv);
  102. return true;
  103. }
  104. case "spawn":
  105. if(arg.length >= 2)
  106. {
  107. try
  108. {
  109. World w = p.getEntityWorld();
  110. EntityVillager v = new EntityVillager(w, Integer.parseInt(arg[1]));
  111. v.setPosition(p.posX, p.posY, p.posZ);
  112. v.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0);
  113. w.spawnEntity(v);
  114. return true;
  115. }
  116. catch(NumberFormatException ex)
  117. {
  118. m.send(cs, "Die ID ist ungültig.");
  119. }
  120. catch(IllegalArgumentException ex)
  121. {
  122. m.send(cs, "Dieser Typ von Villager existiert nicht.");
  123. }
  124. }
  125. break;
  126. case "child":
  127. if(arg.length >= 2)
  128. {
  129. try
  130. {
  131. World w = p.getEntityWorld();
  132. EntityVillager v = new EntityVillager(w, Integer.parseInt(arg[1]));
  133. v.setGrowingAge(Integer.MIN_VALUE);
  134. v.setPosition(p.posX, p.posY, p.posZ);
  135. v.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0);
  136. w.spawnEntity(v);
  137. return true;
  138. }
  139. catch(IllegalArgumentException ex)
  140. {
  141. m.send(cs, "Dieser Typ von Villager existiert nicht.");
  142. }
  143. }
  144. break;
  145. }
  146. }
  147. // Help Menu
  148. m.send(cs, "/villager ...");
  149. m.sendHelpListElement(cs, "inv", "Öffnet den Inventar eines Villagers");
  150. m.sendHelpListElement(cs, "trades", "Öffnet die Trades vom Villager");
  151. m.sendHelpListElement(cs, "spawn <profid>", "Spawnt einen Villager");
  152. m.sendHelpListElement(cs, "child <profid>", "Spawnt einen Villager");
  153. return true;
  154. }
  155. }