CommandVillager.java 6.4 KB

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