@Override public BlockPos getCenter() { return village.getCenter(); }
public static VampirismVillage get(Village v) { return (VampirismVillage) v.getCapability(CAP, null); }
@Override public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { BlockPos pos = sender.getPosition(); World world = sender.getEntityWorld(); int dX, dZ; int range = 64; Village closest = world.villageCollection.getNearestVillage(pos, range); if (closest == null) { UtilChat.addChatMessage(sender, "command.villageinfo.none"); } else { int doors = closest.getNumVillageDoors(); int villagers = closest.getNumVillagers(); UtilChat.addChatMessage(sender, UtilChat.lang("command.villageinfo.popul") + String.format("%d", villagers)); UtilChat.addChatMessage(sender, UtilChat.lang("command.villageinfo.doors") + String.format("%d", doors)); if (sender instanceof EntityPlayer) { // command blocks/server controllers do not have reputation EntityPlayer player = (EntityPlayer) sender; int rep = closest.getPlayerReputation(player.getUniqueID()); UtilChat.addChatMessage(sender, player.getName() + " " + UtilChat.lang("command.villageinfo.reputation") + String.format("%d", rep)); } dX = pos.getX() - closest.getCenter().getX(); dZ = pos.getZ() - closest.getCenter().getZ(); int dist = MathHelper.floor(Math.sqrt(dX * dX + dZ * dZ)); UtilChat.addChatMessage(sender, UtilChat.lang("command.villageinfo.center") + String.format("%d", dist)); } } }
/** * Returns the village if the specified chunk overlays its territory. */ public static Village getVillageInChunk(Chunk chunk) { int centerX = (chunk.x << 4) + 8; int centerZ = (chunk.z << 4) + 8; List<Village> villages = chunk.getWorld().villageCollection.getVillageList(); for (Village village : villages) { BlockPos coords = village.getCenter(); if ((centerX - coords.getX())*(centerX - coords.getX()) + (centerZ - coords.getZ())*(centerZ - coords.getZ()) <= village.getVillageRadius()*village.getVillageRadius()) { return village; } } return null; }
public String makeDebugString(BlockPos pos) { Village v = getVillage(); if (v == null) { return "MC Village does not exist" + getCenter(); } else { StringBuilder builder = new StringBuilder(); builder.append("Center: ").append(getCenter().toString()); builder.append("Overtaken: ").append(isOvertaken()); builder.append("\nIs inside: ").append(v.isBlockPosWithinSqVillageRadius(pos)).append(" (").append(getBoundingBox().contains(new Vec3d(pos))).append(')'); builder.append("\n").append(String.format("RBitten: %s, RConv: %s, RBDeath: %s, Agrr: %s", recentlyBitten, recentlyConverted, recentlyBittenToDeath, agressive)); List<EntityVillager> allVillagers = getAllVillager(); List<EntityBasicHunter> hunters = getHunters(); List<IAggressiveVillager> hunterVillagers = filterHunterVillagers(allVillagers); List<EntityVillager> normalVillager = filterNormalVillagers(allVillagers); List<EntityBasicVampire> vampires = getVampires(); List<EntityVillager> vampireVillagers = filterVampireVillagers(allVillagers); builder.append("\n").append(String.format("Stats: Doors: %s, Aggro: %s, v: %s, vh: %s, h: %s, v: %s, vv: %s", v.getNumVillageDoors(), calculateAggressiveCounter(), normalVillager.size(), hunterVillagers.size(), hunters.size(), vampires.size(), vampireVillagers.size())); int hunterCount = hunters.size() + hunterVillagers.size() / 2; int vampireCount = vampires.size() + vampireVillagers.size() / 2; boolean spawn = (isOvertaken() ? vampireCount : hunterCount) < (Balance.village.MIN_HUNTER_COUNT_VILLAGE_PER_DOOR * v.getNumVillageDoors() + 1); builder.append("\nShould Spawn: ").append(hunterCount).append('(').append(spawn).append(')'); builder.append("\nAggressors: ").append(villageAggressorVampires.toString()); return builder.toString(); } }
/** * Returns true if the village has a door in the specified chunk. */ public static boolean isVillageDoorInChunk(Village village, Chunk chunk) { int centerX = (chunk.x << 4) + 8; int centerZ = (chunk.z << 4) + 8; if (village.isAnnihilated()) { return true; } for (Object doorInfo : village.getVillageDoorInfoList()) { BlockPos door = ((VillageDoorInfo) doorInfo).getDoorBlockPos(); if ((centerX - door.getX())*(centerX - door.getX()) + (centerZ - door.getZ())*(centerZ - door.getZ()) <= 10*10) { return true; } } return false; } }
private VillageDoorInfo findNearestDoor(Village villageIn) { VillageDoorInfo villagedoorinfo = null; int i = Integer.MAX_VALUE; for (VillageDoorInfo villagedoorinfo1 : villageIn.getVillageDoorInfoList()) { int j = villagedoorinfo1.getDistanceSquared(MathHelper.floor(this.theEntity.posX), MathHelper.floor(this.theEntity.posY), MathHelper.floor(this.theEntity.posZ)); if (j < i && !this.doesDoorListContain(villagedoorinfo1)) { villagedoorinfo = villagedoorinfo1; i = j; } } return villagedoorinfo; }
if (v.world.rand.nextInt(100) == 8) { int vampireCount = vampireMobs.size() + vampireVillager.size() / 2; boolean spawn = Balance.village.SPAWN_VAMPIRE_IN_OVERTAKEN && vampireCount < (Balance.village.MIN_HUNTER_COUNT_VILLAGE_PER_DOOR * v.getNumVillageDoors() + 1); if (spawn || v.world.rand.nextInt(30) == 0) { VampirismMod.log.d(TAG, "Stats(Overtaken): Doors: %s, Pos %s", v.getNumVillageDoors(), this.getCenter()); VampirismMod.log.w(TAG, "Vampire Count: %s, Spawn Config: %s, Doors: %s", vampireCount, Balance.village.MIN_HUNTER_COUNT_VILLAGE_PER_DOOR, v.getNumVillageDoors()); spawn = false; if (v.world.rand.nextInt(30) == 0) { int hunterCount = hunters.size() + hunterVillagers.size() / 2; int maxHunterCount = (int) (Balance.village.MIN_HUNTER_COUNT_VILLAGE_PER_DOOR * v.getNumVillageDoors() + 1); if (maxHunterCount > 20) { VampirismMod.log.w(TAG, "Stats: Doors: %s, Aggro: %s, v: %s, vh: %s, h: %s", v.getNumVillageDoors(), calculateAggressiveCounter(), normalVillager.size(), hunterVillagers.size(), hunters.size()); VampirismMod.log.w(TAG, "Hunter Count: %s, Spawn Config: %s", hunterCount, Balance.village.MIN_HUNTER_COUNT_VILLAGE_PER_DOOR); maxHunterCount = 20; VampirismMod.log.d(TAG, "Stats: Doors: %s, Aggro: %s, v: %s, vh: %s, h: %s. Pos %s", v.getNumVillageDoors(), calculateAggressiveCounter(), normalVillager.size(), hunterVillagers.size(), hunters.size(), this.getCenter());
@Override public boolean shouldExecute() { BlockPos blockpos = new BlockPos(this.entityObj); if (this.entityObj.getEntityWorld().isDaytime() && this.entityObj.getEntityWorld().provider.hasSkyLight()) { if (this.entityObj.getRNG().nextInt(50) != 0) { return false; } else if (this.insidePosX != -1 && this.entityObj.getDistanceSq((double) this.insidePosX, this.entityObj.posY, (double) this.insidePosZ) < 4.0D) { return false; } else { Village village = this.entityObj.getEntityWorld().getVillageCollection().getNearestVillage(blockpos, 14); if (village == null) { return false; } else { this.doorInfo = village.getDoorInfo(blockpos); return this.doorInfo != null; } } } else { return false; } }
@Override public AxisAlignedBB getBoundingBox() { int r = village.getVillageRadius(); BlockPos cc = village.getCenter(); return new AxisAlignedBB(cc.getX() - r, cc.getY() - 10, cc.getZ() - r, cc.getX() + r, cc.getY() + 10, cc.getZ() + r); }