package me.km.datatools; import me.km.api.GlobalText; import me.km.api.Module; import me.km.api.ModuleCommand; import me.km.api.Utils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import me.km.inventory.CustomContainer; import me.km.inventory.CustomContainerBase; import me.km.permissions.Permissions; import me.km.inventory.InventoryBase; import me.km.inventory.InventoryUtils; import net.minecraft.command.ICommandSender; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.village.MerchantRecipe; import net.minecraft.village.MerchantRecipeList; import net.minecraft.world.World; public class CommandVillager extends ModuleCommand { private final ArrayList vil; public CommandVillager(Module m) { super("villager", m); super.setDescription("Spezielle Commands für Villager"); super.setUsage("/villager für die Hilfe"); super.setPermission(Permissions.VILLAGER); super.addAlias("vi"); vil = new ArrayList<>(Arrays.asList(new String[] {"inv", "trades", "spawn", "child"})); } @Override public List getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, BlockPos targetPos) { List names = new ArrayList<>(); if(args.length == 1) { vil.stream().filter(e -> e.toLowerCase().startsWith(args[0].toLowerCase())).forEach(e -> { names.add(e); }); return names; } return names; } @Override public boolean execute(ICommandSender cs, String[] arg) { if(!(cs instanceof EntityPlayerMP)) { this.getModule().send(cs, GlobalText.onlyPlayer()); return true; } EntityPlayerMP p = (EntityPlayerMP) cs; Module m = this.getModule(); if(arg.length >= 1) { switch (arg[0]) { case "inv": { EntityVillager v = Utils.getTargetedEntity(p, 3, EntityVillager.class); if(v == null) { m.send(cs, "Du musst auf einen Villager gerichtet sein."); return true; } p.displayGUIChest(InventoryUtils.getInventory(v)); return true; } case "trades": { EntityVillager v = Utils.getTargetedEntity(p, 3, EntityVillager.class); if(v == null) { m.send(cs, "Du musst auf einen Villager gerichtet sein."); return true; } InventoryBase inv = new InventoryBase("ChangeTrades - " + v.getEntityId(), 54, v); int i = 0; MerchantRecipeList list = v.getRecipes(null); if(list != null) { for(MerchantRecipe mr : list) { inv.setInventorySlotContents(i, mr.getItemToSell().copy()); inv.setInventorySlotContents(i + 9, mr.getItemToBuy().copy()); inv.setInventorySlotContents(i + 18, mr.getSecondItemToBuy().copy()); i++; if(i >= 9) { i = 27; } if(i >= 36) { break; } } } new CustomContainer(inv, p).openForPlayer(); return true; } case "spawn": if(arg.length >= 2) { try { World w = p.getEntityWorld(); EntityVillager v = new EntityVillager(w, Integer.parseInt(arg[1])); v.setPosition(p.posX, p.posY, p.posZ); v.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0); w.spawnEntity(v); return true; } catch(NumberFormatException ex) { m.send(cs, "Die ID ist ungültig."); } catch(IllegalArgumentException ex) { m.send(cs, "Dieser Typ von Villager existiert nicht."); } } break; case "child": if(arg.length >= 2) { try { World w = p.getEntityWorld(); EntityVillager v = new EntityVillager(w, Integer.parseInt(arg[1])); v.setGrowingAge(Integer.MIN_VALUE); v.setPosition(p.posX, p.posY, p.posZ); v.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0); w.spawnEntity(v); return true; } catch(IllegalArgumentException ex) { m.send(cs, "Dieser Typ von Villager existiert nicht."); } } break; } } // Help Menu m.send(cs, "/villager ..."); m.sendHelpListElement(cs, "inv", "Öffnet den Inventar eines Villagers"); m.sendHelpListElement(cs, "trades", "Öffnet die Trades vom Villager"); m.sendHelpListElement(cs, "spawn ", "Spawnt einen Villager"); m.sendHelpListElement(cs, "child ", "Spawnt einen Villager"); return true; } }