Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //EntityCreature.java
- package net.minecraft.src;
- import net.minecraft.src.Entity;
- import net.minecraft.src.EntityLiving;
- import net.minecraft.src.MathHelper;
- import net.minecraft.src.PathEntity;
- import net.minecraft.src.Vec3D;
- import net.minecraft.src.World;
- public class EntityCreature extends EntityHooks {
- private PathEntity pathToEntity;
- public Entity playerToAttack;
- protected boolean hasAttacked = false;
- public EntityCreature(World var1) {
- super(var1);
- }
- protected boolean isMovementCeased() {
- return false;
- }
- protected void updatePlayerActionState() {
- this.hasAttacked = this.isMovementCeased();
- float var1 = 16.0F;
- if(this.playerToAttack == null) {
- //override
- this.playerToAttack = tryFindPlayer();
- //save for the path call below - this might make entities not attack player until they finish their idle move path
- /*if(this.playerToAttack != null) {
- this.pathToEntity = this.worldObj.getPathToEntity(this, this.playerToAttack, var1);
- }*/
- } else if(!this.playerToAttack.isEntityAlive()) {
- this.playerToAttack = null;
- this.setPathToEntity(null); //addition
- pathfindDelay = 0;
- } else {
- float var2 = this.playerToAttack.getDistanceToEntity(this);
- if(this.canEntityBeSeen(this.playerToAttack)) {
- //override
- this.tryAttackEntity(this.playerToAttack, var2);
- } else {
- this.attackBlockedEntity(this.playerToAttack, var2);
- }
- }
- if(!this.hasAttacked && this.playerToAttack != null && (this.pathToEntity == null/* || this.rand.nextInt(20) == 0*/)) {
- //override
- /*this.pathToEntity = */tryPath(this.playerToAttack, var1); //this.worldObj.getPathToEntity(this, this.playerToAttack, var1);
- } else if(!this.hasAttacked && (this.pathToEntity == null && (this.rand.nextInt(80) == 0 || this.rand.nextInt(80) == 0))) {
- this.func_31026_E();
- }
- //AI Tick hook - after targeting logic, before path tracking and movement logic
- EntAPI.RunHooks_AITick((EntityCreature)this);
- int var21 = MathHelper.floor_double(this.boundingBox.minY + 0.5D);
- boolean var3 = this.isInWater();
- boolean var4 = this.handleLavaMovement();
- this.rotationPitch = 0.0F;
- if(this.pathToEntity != null/* && this.rand.nextInt(100) != 0*/) {
- Vec3D var5 = this.pathToEntity.getPosition(this);
- double var6 = (double)(this.width * pathFollowDist); //override on path track distance
- while(var5 != null && var5.squareDistanceTo(this.posX, var5.yCoord, this.posZ) < var6 * var6) {
- this.pathToEntity.incrementPathIndex();
- if(this.pathToEntity.isFinished()) {
- var5 = null;
- this.pathToEntity = null;
- //remove pf delay!
- //this.pathfindDelay = 50;
- } else {
- var5 = this.pathToEntity.getPosition(this);
- }
- }
- this.isJumping = false;
- if(var5 != null) {
- double var8 = var5.xCoord - this.posX;
- double var10 = var5.zCoord - this.posZ;
- double var12 = var5.yCoord - (double)var21;
- float var14 = (float)(Math.atan2(var10, var8) * 180.0D / 3.1415927410125732D) - 90.0F;
- float var15 = var14 - this.rotationYaw;
- for(this.moveForward = this.moveSpeed; var15 < -180.0F; var15 += 360.0F) {
- ;
- }
- while(var15 >= 180.0F) {
- var15 -= 360.0F;
- }
- if(var15 > 30.0F) {
- var15 = 30.0F;
- }
- if(var15 < -30.0F) {
- var15 = -30.0F;
- }
- this.rotationYaw += var15;
- if(this.hasAttacked && this.playerToAttack != null) {
- double var16 = this.playerToAttack.posX - this.posX;
- double var18 = this.playerToAttack.posZ - this.posZ;
- float var20 = this.rotationYaw;
- this.rotationYaw = (float)(Math.atan2(var18, var16) * 180.0D / 3.1415927410125732D) - 90.0F;
- var15 = (var20 - this.rotationYaw + 90.0F) * 3.1415927F / 180.0F;
- this.moveStrafing = -MathHelper.sin(var15) * this.moveForward * 1.0F;
- this.moveForward = MathHelper.cos(var15) * this.moveForward * 1.0F;
- }
- if(var12 > 0.0D) {
- this.isJumping = true;
- }
- }
- //override
- if(this.shouldFaceTarget()) {
- this.faceEntity(this.playerToAttack, 30.0F, 30.0F);
- }
- if(this.isCollidedHorizontally && !this.hasPath()) {
- this.isJumping = true;
- }
- if(this.rand.nextFloat() < 0.8F && (var3 || var4)) {
- this.isJumping = true;
- }
- //super.updatePlayerActionState();
- } else {
- //override/addition - i think this will give the ability to move without a path
- if(this.shouldFaceTarget()) {
- this.moveForward = this.moveSpeed;
- this.faceEntity(this.playerToAttack, 30.0F, 30.0F);
- } else {
- super.updatePlayerActionState();
- }
- //this.pathToEntity = null;
- }
- }
- protected void func_31026_E() {
- //if (true) return;
- boolean var1 = false;
- int var2 = -1;
- int var3 = -1;
- int var4 = -1;
- float var5 = -99999.0F;
- for(int var6 = 0; var6 < 10; ++var6) {
- int var7 = MathHelper.floor_double(this.posX + (double)this.rand.nextInt(13) - 6.0D);
- int var8 = MathHelper.floor_double(this.posY + (double)this.rand.nextInt(7) - 3.0D);
- int var9 = MathHelper.floor_double(this.posZ + (double)this.rand.nextInt(13) - 6.0D);
- float var10 = this.getBlockPathWeight(var7, var8, var9);
- if(var10 > var5) {
- var5 = var10;
- var2 = var7;
- var3 = var8;
- var4 = var9;
- var1 = true;
- }
- }
- if(var1) {
- this.pathToEntity = this.worldObj.getEntityPathToXYZ(this, var2, var3, var4, 10.0F);
- }
- }
- protected void attackEntity(Entity var1, float var2) {}
- protected void attackBlockedEntity(Entity var1, float var2) {}
- protected float getBlockPathWeight(int var1, int var2, int var3) {
- return 0.0F;
- }
- protected Entity findPlayerToAttack() {
- return null;
- }
- public boolean getCanSpawnHere() {
- int var1 = MathHelper.floor_double(this.posX);
- int var2 = MathHelper.floor_double(this.boundingBox.minY);
- int var3 = MathHelper.floor_double(this.posZ);
- return super.getCanSpawnHere() && this.getBlockPathWeight(var1, var2, var3) >= 0.0F;
- }
- public boolean hasPath() {
- return this.pathToEntity != null;
- }
- public void setPathToEntity(PathEntity var1) {
- this.pathToEntity = var1;
- }
- public PathEntity getPath() {
- return this.pathToEntity;
- }
- public Entity getTarget() {
- return this.playerToAttack;
- }
- public void setTarget(Entity var1) {
- this.playerToAttack = var1;
- }
- }
- //EntityHooks.java
- package net.minecraft.src;
- import java.util.List;
- // Referenced classes of package net.minecraft.src:
- // Entity, Vec3D, StepSound, AxisAlignedBB,
- // World, MathHelper, Material, NBTTagCompound,
- // Block, MovingObjectPosition, ItemStack
- public abstract class EntityHooks extends EntityLiving {
- private static boolean sdkGrapplingHookNotFound = false;
- private static int sdkBlockRopeId = -1;
- public int uID;
- public int mobtype;
- public int team;
- public int orders;
- public int guardX;
- public int guardY;
- public int guardZ;
- public int enhanced;
- public int guardEntID;
- public int mountEntID;
- public int kills;
- public Entity guardEnt;
- public Entity attackingEnt;
- public int state;
- public int maxhealth;
- public int AIDelay;
- public int mineDelay;
- public int PFDelay;
- public float curBlockDmg;
- public int curBlockX;
- public int curBlockZ;
- public boolean mining;
- public boolean forcejump;
- public int noMoveTicks;
- public float info;
- public String info2;
- public int nearbyMinerCount;
- public boolean canSwitchTarget;
- public boolean noTick;
- public float pathFollowDist = 2.0F;
- public int noSeeTicks = 0;
- public int pathfindDelay = 0;
- public float plDist;
- public boolean swingArm = false;
- public int swingTick = 0;
- public int lastNodeTimer;
- public int lastNode;
- public PathfinderEnh pf;
- public EntityHooks(World world)
- {
- super(world);
- //
- uID = -1;
- mobtype = 0;
- team = 0;
- orders = 0;
- guardX = -1;
- guardY = -1;
- guardZ = -1;
- enhanced = 0;
- guardEntID = -1;
- mountEntID = -1;
- guardEnt = null;
- attackingEnt = null;
- maxhealth = 0;
- noTick = false;
- pathFollowDist = 1.2F;
- pf = new PathfinderEnh(world);
- //
- EntAPI.RunHooks_Init((EntityCreature)this,world);
- }
- //Main Hooks
- public void onUpdate()
- {
- EntAPI.RunHooks_onUpdate_pre((EntityCreature)this);
- super.onUpdate();
- EntAPI.RunHooks_onUpdate_post((EntityCreature)this);
- }
- public boolean canClimb() {
- if (/*this instanceof EntityCreeper || */this instanceof EntityCreeper && false) {
- return true;
- }
- return false;
- }
- public boolean isOnLadder() {
- if (canClimb() && this.isCollidedHorizontally) {
- return true;
- }
- return false;
- }
- public boolean attackEntityFrom(Entity entity, int i)
- {
- if (EntAPI.RunHooks_AttackEntityFrom((EntityCreature)this, entity, i)) {
- return super.attackEntityFrom(entity, i);
- }
- return false;
- }
- public void writeEntityToNBT(NBTTagCompound nbttagcompound)
- {
- nbttagcompound.setShort("uID", (short)this.uID);
- nbttagcompound.setShort("MobType", (short)this.mobtype);
- nbttagcompound.setShort("Team", (short)this.team);
- nbttagcompound.setShort("Orders", (short)this.orders);
- nbttagcompound.setShort("guardX", (short)this.guardX);
- nbttagcompound.setShort("guardY", (short)this.guardY);
- nbttagcompound.setShort("guardZ", (short)this.guardZ);
- nbttagcompound.setShort("enhanced", (short)this.enhanced);
- nbttagcompound.setShort("guardEntID", (short)this.guardEntID);
- nbttagcompound.setShort("mineDelay", (short)this.mineDelay);
- nbttagcompound.setShort("kills", (short)this.kills);
- super.writeEntityToNBT(nbttagcompound);
- EntAPI.RunHooks_Saved((EntityCreature)this, nbttagcompound);
- }
- public void readEntityFromNBT(NBTTagCompound nbttagcompound)
- {
- this.uID = nbttagcompound.getShort("uID");
- this.mobtype = nbttagcompound.getShort("MobType");
- this.team = nbttagcompound.getShort("Team");
- this.orders = nbttagcompound.getShort("Orders");
- this.guardX = nbttagcompound.getShort("guardX");
- this.guardY = nbttagcompound.getShort("guardY");
- this.guardZ = nbttagcompound.getShort("guardZ");
- this.enhanced = nbttagcompound.getShort("enhanced");
- this.guardEntID = nbttagcompound.getShort("guardEntID");
- this.mountEntID = nbttagcompound.getShort("mountEntID");
- this.mineDelay = nbttagcompound.getShort("mineDelay");
- this.kills = nbttagcompound.getShort("kills");
- if(this instanceof EntityMob) {
- this.maxhealth = 20;
- /*} else if(this instanceof EntityPlayer) {
- this.maxhealth = 20;
- firstTick = true;
- this.team = playerTeamInit;*/
- } else if(this instanceof EntityAnimal) {
- this.maxhealth = 10;
- }
- if(this.health > this.maxhealth) {
- this.maxhealth = this.health;
- }
- if(mod_AITools.isGuardian(this)) {
- this.noTick = true;
- }
- super.readEntityFromNBT(nbttagcompound);
- EntAPI.RunHooks_Loaded((EntityCreature)this, nbttagcompound);
- }
- public void setEntityDead() {
- //System.out.println("hmmm!");
- if (deathTime < 1 && team == 1) { return; }
- super.setEntityDead();
- }
- public void onDeath(Entity var1) {
- EntAPI.RunHooks_Killed((EntityCreature)this, var1);
- if(this instanceof EntityAnimal) {
- mod_PathingActivated.spawnScent(this);
- }
- super.onDeath(var1);
- }
- protected void tryAttackEntity(Entity var1, float var2) {
- if (EntAPI.RunHooks_TryAttackEntity(this, var1, var2)) {
- this.attackEntity(var1, var2);
- }
- }
- protected Entity tryFindPlayer() {
- Entity ent = findPlayerToAttack();
- if (mod_PathingActivated.sameTeam(this, ent)) {
- return null;
- } else {
- return ent;
- }
- }
- protected Entity findPlayerToAttack() {
- return null;
- }
- protected void attackEntity(Entity var1, float var2) {}
- public int getTalkInterval()
- {
- if (team == 1) {
- return 400;
- }
- return 80;
- }
- //Entity creature stuff
- protected void updatePlayerActionState() {
- super.updatePlayerActionState();
- }
- public Entity getTarget() {
- return null;
- }
- public boolean shouldFaceTarget() {
- //if (mod_PathingActivated.hasPetMod) {
- //System.out.println(state);
- (new StringBuilder()).append("state - ").append(state).toString();
- if(state != 1) {
- if((state == 3 || state == 4) && getTarget() != null) {
- if(state == 3) {
- if (this.guardEnt != null && this.getDistanceToEntity(this.guardEnt) > 32.0F) {
- if (teleportToTarget(this.guardEnt)) {
- setPathToEntity(null);
- }
- }
- if (this.guardEnt != null && isSolidPath(this.guardEnt)) {
- setPathToEntity(null);
- this.moveForward = this.moveSpeed;
- faceEntity(this.guardEnt, 30.0F, 30.0F);
- //faceEntity(getTarget(), 30.0F, 30.0F);
- //System.out.println(getTarget());
- return true;
- }
- //faceEntity(this.guardEnt, 30.0F, 30.0F);
- return false;
- /*d1 = guardEnt.posX - posX;
- d2 = guardEnt.posZ - posZ;
- double d5 = guardEnt.posY - (double)i;*/
- } else if(state == 4) {
- if (getTarget() != null && (isSolidPath(getTarget()) || this.getPath() == null)) {
- this.moveForward = this.moveSpeed;
- faceEntity(getTarget(), 30.0F, 30.0F);
- setPathToEntity(null);
- return true;
- }
- return false;
- /*d1 = playerToAttack.posX - posX;
- d2 = playerToAttack.posZ - posZ;
- double d6 = playerToAttack.posY - (double)i;*/
- }
- } else if(state == 2) {
- return false;
- //this code is depreciated, pet mod needs to try to pathfind to this spot
- //d1 = (double)guardX - posX;
- //d2 = (double)guardZ - posZ;
- //double d7 = (double)guardY - (double)i;
- }
- }
- //} else {
- if(this.isCollidedHorizontally) {
- this.isJumping = true;
- }
- /*if (((EntityCreature)this).getTarget() != null && (isSolidPath(((EntityCreature)this).getTarget()) || this.getPath() == null)) {
- return true;
- }*/
- //}
- return false;
- }
- public boolean shouldTarget(Entity var1) {
- if (mod_PathingActivated.sameTeam(this, var1)) {
- /*if (getDistanceToEntity(var1) < 5.0F) {
- return false;
- }*/
- return false;
- }
- if(mod_PathingActivated.useEnt(this) && !(this instanceof EntityWolf)) {
- if(mod_PathingActivated.OmnipotentHostiles.get().booleanValue()) {
- return true;
- } else {
- float var2 = (float)mod_PathingActivated.AwarenessRange.get().intValue();
- this.plDist = this.getDistanceToEntity(var1);
- return this.plDist <= var2 && (this.canEntityBeSeen(var1) || mod_PathingActivated.XRayVision.get());
- }
- } else {
- return false;
- }
- }
- public boolean isSolidPath(Entity var1) {
- if (this.team != 1 && !mod_PathingActivated.useEnt(this)) { return true; }
- if (this.getDistanceToEntity(var1) > mod_PathingActivated.MaxPFRange.get()) { return true; }
- return this.canEntityBeSeen(var1) && (this.getDistanceToEntity(var1) < 5.0F) && Math.abs(this.posY - (double)this.yOffset - (var1.posY - (double)var1.yOffset)) <= 3.5D;
- }
- public boolean shouldPath() {
- return mod_PathingActivated.useEnt(this);
- }
- public boolean tryPath(Entity var1, float var2) {
- return tryPath(var1, var2, false);
- }
- public boolean tryPath(Entity var1, float var2, boolean pet) {
- if (pathfindDelay > 0) { return false; }
- if (mod_PathingActivated.hasPetMod) {
- if (mod_PathingActivated.sameTeam(this, var1) && !pet) {
- return false;
- }
- }
- if((this.shouldPath() || pet) && var1 != null) {
- float var3 = this.getDistanceToEntity(var1);
- if(var3 > var2) {
- return false;
- } else {
- //mod_MovePlus.displayMessage((new StringBuilder()).append("PFCount: ").append(mod_PathingActivated.PFCount++).toString());
- pathfindDelay = (int)var2*2 + rand.nextInt(100);
- setPathToEntity(pf.getPathToEntity(this, var1, var2, canClimb()));
- //System.out.println(this);
- //setPathToEntity(this.worldObj.getPathToEntity(this, var1, var2));
- if(this.getPath() == null)
- {
- pathfindDelay = (int)var2*2 + rand.nextInt(200);
- }
- return true;
- }
- } else {
- return false;
- }
- }
- public boolean tryPathXYZ(int x, int y, int z, float var2) {
- if (pathfindDelay > 0) { return false; }
- float var3 = (float)this.getDistance((double)x, (double)y, (double)z);
- if(var3 > var2) {
- return false;
- } else {
- //mod_MovePlus.displayMessage((new StringBuilder()).append("PFCount: ").append(mod_PathingActivated.PFCount++).toString());
- //System.out.println("path XYZ");
- pathfindDelay = (int)var2*2 + rand.nextInt(100);
- setPathToEntity(this.worldObj.getEntityPathToXYZ(this, x, y, z, var2));
- if(this.getPath() == null)
- {
- pathfindDelay = (int)var2*2 + rand.nextInt(200);
- }
- return true;
- }
- //return false;
- }
- public PathEntity getPath() {
- return null;
- }
- public void setPathToEntity(PathEntity var1) {
- }
- public float getPathDist() {
- float var1 = this.plDist + 32.0F;
- if(var1 > (float)mod_PathingActivated.MaxPFRange.get()) {
- var1 = (float)mod_PathingActivated.MaxPFRange.get();
- }
- if((float)mod_PathingActivated.MaxPFRange.get().intValue() > 0.0F) {
- var1 = (float)mod_PathingActivated.MaxPFRange.get().intValue();
- }
- return var1;
- }
- public static boolean notMoving(EntityLiving var0, float var1) {
- double var2 = var0.prevPosX - var0.posX;
- double var4 = var0.prevPosZ - var0.posZ;
- float var6 = (float)Math.sqrt(var2 * var2 + var4 * var4);
- return var6 < var1;
- }
- public float getXZDistanceToEntity(Entity var1) {
- float var2 = (float)(this.posX - var1.posX);
- float var3 = (float)(this.posZ - var1.posZ);
- return (float)Math.sqrt((double)(var2 * var2 + var3 * var3));
- }
- public void onLivingUpdate() {
- if (mod_PathingActivated.hasNMMode) {
- if (mod_NMMode.entFireImmune(this)) {
- this.fire = 0;
- }
- }
- if (mod_PathingActivated.hasPetMod) {
- if (this.team == 1) {
- this.fire = 0;
- }
- }
- super.onLivingUpdate();
- if(swingArm) {
- if (swingTick > 3 && swingTick < 9) {
- swingTick+=2;
- } else {
- swingTick++;
- }
- if(swingTick >= 24) {
- swingTick = 0;
- swingArm = false;
- }
- } else {
- swingTick = 0;
- }
- if (swingTick <= 16) {
- swingProgress = (float)swingTick / 8F;
- } else {
- swingProgress = 0F;
- }
- }
- //Feature extra overrides
- public void moveEntity(double d, double d1, double d2) {
- //AI Added
- if(orders != 2) {
- if(enhanced == 1) {
- if(!mod_PathingActivated.freezePets || team != 1) {
- super.moveEntity(motionX * (double)mod_PathingActivated.enhPetSpeedMultiplier, motionY, motionZ * (double)mod_PathingActivated.enhPetSpeedMultiplier);
- }
- } else if(!mod_PathingActivated.freezePets || team != 1) {
- super.moveEntity(motionX, motionY, motionZ);
- }
- } else {
- super.moveEntity(0.0D, motionY, 0.0D);
- }
- }
- protected boolean canDespawn()
- {
- //AI Modded
- if (team != 1 && orders == 0) {
- return true;
- } return false;
- }
- public boolean isInRangeToRenderVec3D(Vec3D vec3d) {
- if(mod_PathingActivated.unlimitedEntityRenderRange) {
- return true;
- } else {
- double d = posX - vec3d.xCoord;
- double d1 = posY - vec3d.yCoord;
- double d2 = posZ - vec3d.zCoord;
- double d3 = d * d + d1 * d1 + d2 * d2;
- return isInRangeToRenderDist(d3);
- }
- }
- public void applyEntityCollision(Entity entity) {
- if(entity.riddenByEntity == this || entity.ridingEntity == this) {
- return;
- }
- double d = entity.posX - posX;
- double d1 = entity.posY - posY;
- double d2 = entity.posZ - posZ;
- double d3 = MathHelper.abs_max(d, d2);
- d3 = MathHelper.abs_max(d, d1);
- if(d3 >= 0.0099999997764825821D) {
- d3 = MathHelper.sqrt_double(d3);
- d /= d3;
- d1 /= d3;
- d2 /= d3;
- double d4 = 1.0D / d3;
- if(d4 > 1.0D) {
- d4 = 1.0D;
- }
- d *= d4;
- d1 *= d4;
- d2 *= d4;
- d *= 0.05000000074505806D;
- d1 *= 0.05000000074505806D;
- d2 *= 0.05000000074505806D;
- d *= 1.0F - entityCollisionReduction;
- d2 *= 1.0F - entityCollisionReduction;
- if (!mod_PathingActivated.VerticalCollision) {
- d1 = 0;
- }
- if(mod_PathingActivated.NothingPushesPlayer) {
- /*if(!(this instanceof EntityPlayer)) {
- addVelocity(-d, -d1, -d2);
- }*/
- addVelocity(-d, -d1, -d2);
- if(!(entity instanceof EntityPlayer)) {
- entity.addVelocity(d, d1, d2);
- }
- } else {
- addVelocity(-d, -d1, -d2);
- entity.addVelocity(d, d1, d2);
- }
- }
- }
- public boolean isEntityInsideOpaqueBlock()
- {
- if (this.ridingEntity != null) {
- return false;
- }
- for(int i = 0; i < 8; i++)
- {
- float f = ((float)((i >> 0) % 2) - 0.5F) * width * 0.9F;
- float f1 = ((float)((i >> 1) % 2) - 0.5F) * 0.1F;
- float f2 = ((float)((i >> 2) % 2) - 0.5F) * width * 0.9F;
- int j = MathHelper.floor_double(posX + (double)f);
- int k = MathHelper.floor_double(posY + (double)getEyeHeight() + (double)f1);
- int l = MathHelper.floor_double(posZ + (double)f2);
- if(worldObj.isBlockNormalCube(j, k, l))
- {
- return true;
- }
- }
- return false;
- }
- public boolean teleportToTarget(Entity var1) {
- int var4 = MathHelper.floor_double(var1.posX) - 2;
- int var5 = MathHelper.floor_double(var1.posZ) - 2;
- int var6 = MathHelper.floor_double(var1.boundingBox.minY);
- for(int var7 = 0; var7 <= 4; ++var7) {
- for(int var8 = 0; var8 <= 4; ++var8) {
- if((var7 < 1 || var8 < 1 || var7 > 3 || var8 > 3) &&
- this.worldObj.isBlockNormalCube(var4 + var7, var6 - 1, var5 + var8) &&
- !this.worldObj.isBlockNormalCube(var4 + var7, var6, var5 + var8) &&
- !this.worldObj.isBlockNormalCube(var4 + var7+1, var6, var5 + var8) &&
- !this.worldObj.isBlockNormalCube(var4 + var7, var6, var5 + var8+1) &&
- !this.worldObj.isBlockNormalCube(var4 + var7+1, var6, var5 + var8+1) &&
- !this.worldObj.isBlockNormalCube(var4 + var7, var6 + 1, var5 + var8) &&
- !this.worldObj.isBlockNormalCube(var4 + var7+1, var6 + 1, var5 + var8) &&
- !this.worldObj.isBlockNormalCube(var4 + var7, var6 + 1, var5 + var8+1) &&
- !this.worldObj.isBlockNormalCube(var4 + var7+1, var6 + 1, var5 + var8+1)) {
- this.setLocationAndAngles((double)((float)(var4 + var7) + 0.5F), (double)var6, (double)((float)(var5 + var8) + 0.5F), this.rotationYaw, this.rotationPitch);
- return true;
- }
- }
- }
- return false;
- }
- }
- //mod_PathingActivated.java
- package net.minecraft.src;
- import java.io.File;
- public class mod_PathingActivated extends BaseMod implements BaseEntityHooks {
- @MLProp2
- public static STBoolean OmnipotentHostiles;
- @MLProp2
- public static STBoolean ScentAwareness;
- @MLProp2
- public static STBoolean SoundAwareness;
- @MLProp2
- public static STInt ScentStrength;
- @MLProp2
- public static STInt SoundStrength;
- @MLProp2
- public static STBoolean XRayVision;
- @MLProp2
- public static STBoolean TargetLocking;
- /*@MLProp2
- public static STInt PFRange;*/
- @MLProp2
- public static STInt AwarenessRange;
- @MLProp2
- public static STInt MaxPFRange;
- @MLProp2
- public static STText MobBlacklist;
- @MLProp2
- public static int frequentSoundThreshold = 1000;
- public ModSettings settings;
- public ModSettingScreen modscreen;
- public static Map mobsToUse = new HashMap();
- public static Map hostilesToNames = new HashMap();
- public static boolean inUse = false;
- public static Map classToUseMapping = new HashMap();
- public static int lastHealth;
- public static long lastBleedTime;
- public static long lastSoundTime;
- public static float lastMultiply = 1.0F;
- public static EntityLiving thePlayer;
- public static long PFCount = 0;
- public static boolean hasPetMod = false;
- public static boolean hasNMMode = false;
- public static boolean hasMinerZombie = false;
- public static boolean freezePets = false;
- public static double enhPetSpeedMultiplier = 0.0D;
- public static boolean unlimitedEntityRenderRange = false;
- public static boolean VerticalCollision = false;
- public static boolean NothingPushesPlayer = false;
- public static long lastTickRun = 0;
- public static boolean inMenu = false;
- public static long traceCount = 0;
- public mod_PathingActivated() {
- OmnipotentHostiles = new STBoolean("OmnipotentHostiles", Boolean.valueOf(false));
- TargetLocking = new STBoolean("TargetLocking", Boolean.valueOf(false));
- XRayVision = new STBoolean("XRayVision", Boolean.valueOf(false));
- //PFRange = new STInt("PFRange", 64, 0, 8, 512);
- MaxPFRange = new STInt("PFRange", 64, 0, 8, 512);
- AwarenessRange = new STInt("AwarenessRange", 16, 0, 8, 512);
- MobBlacklist = new STText("MobBlacklist", "Skeleton");
- ScentAwareness = new STBoolean("ScentAwareness", Boolean.valueOf(true));
- SoundAwareness = new STBoolean("SoundAwareness", Boolean.valueOf(true));
- ScentStrength = new STInt("ScentStrength", 75, 0, 5, 100);
- SoundStrength = new STInt("SoundStrength", 30, 0, 5, 100);
- try {
- //setupProperties(this.getClass());
- } catch (Exception var2) {
- var2.printStackTrace();
- }
- ModLoader.RegisterEntityID(EntityScent.class, "EntityScent", ModLoader.getUniqueEntityId());
- ModLoader.SetInGameHook(this, true, false);
- ModLoader.SetInGUIHook(this, true, false);
- EntAPI.SetHook_AITick(this);
- EntAPI.SetHook_onUpdate_pre(this);
- EntAPI.SetHook_TryAttackEntity(this);
- try {
- //readURL hmm = new readURL("http://dl.dropbox.com/u/24987042/splashes.txt");
- //hmm.readTextFromURL();
- } catch (Exception ex) {
- }
- settings = new ModSettings("mod_ZombieAwareness");
- modscreen = new ModSettingScreen("Zombie Awareness");
- modscreen.append(new WidgetBoolean(ScentAwareness, "Scent Awareness", "Yes", "No"));
- settings.append(ScentAwareness);
- modscreen.append(new WidgetBoolean(SoundAwareness, "Sound Awareness", "Yes", "No"));
- settings.append(SoundAwareness);
- modscreen.append(new WidgetInt(ScentStrength, "Scent Strength"));
- settings.append(ScentStrength);
- modscreen.append(new WidgetInt(SoundStrength, "Sound Strength"));
- settings.append(SoundStrength);
- modscreen.append(new WidgetInt(AwarenessRange, "Sight Range"));
- settings.append(AwarenessRange);
- modscreen.append(new WidgetBoolean(XRayVision, "X-Ray Sight"));
- settings.append(XRayVision);
- modscreen.append(new WidgetInt(MaxPFRange, "Pathfind Range"));
- settings.append(MaxPFRange);
- modscreen.append(new WidgetText(MobBlacklist, "Mob Blacklist"));
- settings.append(MobBlacklist);
- modscreen.append(new WidgetBoolean(TargetLocking, "Lose target", "never", "dist. + LOS"));
- settings.append(TargetLocking);
- modscreen.append(new WidgetBoolean(OmnipotentHostiles, "Auto target player", "Yes", "No"));
- settings.append(OmnipotentHostiles);
- /*hostilesToNames.put(net.minecraft.src.EntityCreeper.class, "Creeper");
- hostilesToNames.put(net.minecraft.src.EntitySkeleton.class, "Skeleton");
- hostilesToNames.put(net.minecraft.src.EntityZombie.class, "Zombie");
- hostilesToNames.put(net.minecraft.src.EntitySpider.class, "Spider");
- hostilesToNames.put(net.minecraft.src.EntityPigZombie.class, "PigZombie");
- Subscreen subscreen = new Subscreen("button", "Choose Monsters", new WidgetSinglecolumn(new Widget[0]));
- subscreen.setText("Choose Monsters");
- for(int i = 0; i < mobs.length; i++)
- {
- String s = (String)hostilesToNames.get(mobs[i]);
- SettingBoolean settingboolean = new SettingBoolean((new StringBuilder()).append("pf_").append(s).toString(), Boolean.valueOf(true));
- settings.append(settingboolean);
- subscreen.add(new WidgetBoolean(settingboolean, s));
- mobsToUse.put(s, settingboolean);
- }
- modscreen.append(subscreen);*/
- SimpleButtonModel simplebuttonmodel = new SimpleButtonModel();
- simplebuttonmodel.addActionCallback(new ModAction(settings, "resetAll", new Class[0]));
- Button button = new Button(simplebuttonmodel);
- button.setText("Reset all to defaults");
- modscreen.append(button);
- settings.load();
- //doMobList();
- }
- public void ModsLoaded() {
- try {
- //mod_PathingActivated.hasPetMod = true;
- } catch (Exception ex) {
- }
- doMobList();
- }
- public static void doMobList() {
- classToUseMapping.clear();
- //System.out.println("Blacklist: ");
- String[] splEnts = MobBlacklist.get().split(",");
- for (int i = 0; i < splEnts.length; i++) {
- splEnts[i] = splEnts[i].trim();
- //System.out.println(splEnts[i]);
- }
- HashMap hashmap = null;
- /*try
- {
- hashmap = (HashMap)ModLoader.getPrivateValue(EntityList.class, null, "a");
- } catch (Throwable throwable) {
- //ModLoader.getLogger().throwing(getClass().getSimpleName(), "setupConfig", throwable);
- return;
- }*/
- try
- {
- try {
- hashmap = (HashMap)ModLoader.getPrivateValue(EntityList.class, null, "a");
- }
- catch (NoSuchFieldException ex)
- {
- hashmap = (HashMap)ModLoader.getPrivateValue(EntityList.class, null, "stringToClassMapping");
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- //WidgetClassicTwocolumn widgetclassictwocolumn = new WidgetClassicTwocolumn(new Widget[0]);
- //widgetclassictwocolumn.add(new WidgetMulti(mode, "Mode"));
- Iterator iterator = hashmap.entrySet().iterator();
- //System.out.print("Zombie Awareness BlackList: ");
- StringBuilder blackList = (new StringBuilder()).append("Zombie Awareness BlackList: ");
- StringBuilder entList = (new StringBuilder()).append("List Options: ");
- for (Iterator i$ = hashmap.keySet().iterator(); i$.hasNext(); ) {
- Object o = i$.next();
- String s = (String)o;
- Class class1 = (Class)hashmap.get(o);
- try
- {
- class1.getDeclaredConstructor(new Class[] { EntityList.class }); } catch (Throwable throwable1) {
- classToUseMapping.put(class1, false);//continue;
- }
- if ((!Modifier.isAbstract(class1.getModifiers())))
- {
- //SettingBoolean settingboolean = new SettingBoolean("mobarrow_" + s, Boolean.valueOf(true));
- //mod_Arrows303.Settings.append(settingboolean);
- //widgetclassictwocolumn.add(new WidgetBoolean(settingboolean, s));
- //mobSettings.put(s, settingboolean);
- if ((IMob.class.isAssignableFrom(class1))) {
- boolean foundEnt = false;
- for (int i = 0; i < splEnts.length; i++) {
- if (s.compareToIgnoreCase(splEnts[i]) == 0) {
- foundEnt = true;
- blackList.append(s + " ");
- //System.out.println("adding to blacklist: " + splEnts[i]);
- break;
- }
- }
- entList.append(s + " ");
- classToUseMapping.put(class1, !foundEnt);
- } else {
- //non mobs
- classToUseMapping.put(class1, false);
- }
- //System.out.println("hmmmm? " + s);
- }
- }
- System.out.println(entList.toString());
- System.out.println(blackList.toString());
- }
- /*public static boolean shouldEnableEnt(Entity var0) {
- return ((Boolean)classToUseMapping.get(var0.getClass())).booleanValue();
- }*/
- public void EntHook_Init(EntityCreature ent, World world) {
- //entInit(world, ent);
- }
- public void EntHook_Loaded(EntityCreature ent, NBTTagCompound data) {
- //AI Added
- //mod_AIManager.entLoaded(ent, data);
- }
- public void EntHook_Saved(EntityCreature ent, NBTTagCompound data) {
- //AI Added
- //mod_AIManager.entSaved(ent, data);
- }
- public void EntHook_Killed(EntityCreature ent, Entity from) {
- }
- //_303 suggests setting field_9346_af to 0 before attackEntityFrom is called, would prevent having to overload this?
- public boolean EntHook_AttackEntityFrom(EntityCreature ent, Entity entFrom, int damage) {
- return true;
- }
- public boolean EntHook_TryAttackEntity(Entity entFrom, Entity entTo, float dist) {
- if (sameTeam(entFrom, entTo)) {
- return false;
- }
- if((double)dist < 2.0D && entTo.boundingBox.maxY > entFrom.boundingBox.minY && entTo.boundingBox.minY < entFrom.boundingBox.maxY && ((EntityLiving)entFrom).attackTime == 0) {
- if (entFrom instanceof EntityZombie) {
- ((EntityCreature)entFrom).swingArm = true;
- ((EntityCreature)entFrom).swingTick = 0;
- }
- }
- return true;
- }
- public static boolean sameTeam(Entity ent1, Entity ent2) {
- //if both 0, more of a neutral setup than teams
- if (getTeam(ent1) == 0 && getTeam(ent2) == 0) {
- return false;
- }
- if (getTeam(ent1) == getTeam(ent2)) {
- return true;
- }
- return false;
- }
- public static int getTeam(Entity entity) {
- if (entity instanceof EntityCreature) {
- return ((EntityCreature)entity).team;
- } else if (entity instanceof EntityPlayer) {
- return 1;
- }
- return 0;
- }
- public void EntHook_onUpdate_pre(EntityCreature ent) {
- //if (true) return;
- //displayMessage((new StringBuilder()).append("yay!").append("").toString());
- //ent.info2 = (new StringBuilder()).append("playerToAttack - ").append(ent.playerToAttack).toString();
- if(ent.pathfindDelay > 0)
- {
- ent.pathfindDelay--;
- }
- if(ent.playerToAttack != null) {
- if(!ent.canEntityBeSeen(ent.playerToAttack)) {
- ++ent.noSeeTicks;
- } else {
- ent.noSeeTicks = 0;
- }
- //uhhhhhh, what if an entity is pathfinding towards you from somewhere? wouldnt this break the pursuit eventually if they get out of sight?
- if(ent.noSeeTicks > 150) {
- ent.noSeeTicks = 0;
- //System.out.println("no see trigger!");
- ent.playerToAttack = null;
- ent.setPathToEntity(null);
- }
- }
- if(ent.notMoving(ent, 0.15F)) {
- ++ent.noMoveTicks;
- if(ent.noMoveTicks > 50) {
- if(ent.rand.nextInt(10) == 0) {
- //System.out.println("idle trigger!");
- ent.playerToAttack = null;
- ent.setPathToEntity(null);
- } else {
- ent.noMoveTicks = 0;
- }
- }
- } else {
- ent.noMoveTicks = 0;
- }
- //put a 'cant navigate' detector here using pathentity size changing, and timer
- if (ent.hasPath() && ent.getPath() != null) {
- if (ent.lastNode != ent.getPath().pathLength) {
- ent.lastNode = ent.getPath().pathLength;
- ent.lastNodeTimer = 0;
- //System.out.println("lastNodeTimer = 0");
- } else {
- ent.lastNodeTimer++;
- }
- if (ent.lastNodeTimer > 200) {
- //System.out.println("path reset");
- ent.setPathToEntity(null);
- }
- }
- }
- public void EntHook_onUpdate_post(EntityCreature ent) {
- }
- public void EntHook_AITick(EntityCreature ent) {
- //ent.isJumping = false;
- thePlayer = ModLoader.getMinecraftInstance().thePlayer;
- if(ent.playerToAttack == null && ent.shouldTarget(thePlayer)) {
- //System.out.println("targetted player");
- ent.playerToAttack = thePlayer;
- ent.state = 4;
- if(thePlayer != null && ent.tryPath(ent.playerToAttack, ent.getPathDist())) {
- ;
- }
- } else if(!ent.hasPath() && getTeam(ent) != 1) {
- Entity var3 = mod_PathingActivated.getScent(ent);
- if(var3 != null) {
- ent.state = 1;
- if (ent.tryPath(var3, ent.getPathDist())) {
- //System.out.println("chance!");
- }
- }
- }
- //state stuff
- if (ent.playerToAttack != null && getTeam(ent) != 1) {
- if (!TargetLocking.get() && ent.getDistanceToEntity(ent.playerToAttack) > AwarenessRange.get()) {
- ent.playerToAttack = null;
- ent.state = 1;
- } else {
- ent.state = 4;
- }
- }
- if(ent.isCollidedHorizontally) {
- ent.isJumping = true;
- }
- if (ent instanceof EntityCreeper) {
- if (ent.playerToAttack != null && !(ent.playerToAttack instanceof EntityPlayer)) {
- ent.playerToAttack = thePlayer;
- }
- }
- int pSize = 0;
- if(ent instanceof EntityCreature) {
- PathEntity pEnt = ((EntityCreature)ent).getPath();
- if(pEnt != null) { pSize = pEnt.pathLength; }
- }
- //ent.info2 = (new StringBuilder()).append("pet state: "+ent.state+" - targ: "+ent.playerToAttack+" - pathsize: "+pSize).toString();
- }
- public boolean OnTickInGUI(Minecraft game, GuiScreen gui)
- {
- if (ModLoader.getMinecraftInstance().thePlayer != null) {
- //long ticksRan = System.currentTimeMillis();
- if (!(gui instanceof GuiContainer)) {
- inMenu = true;
- lastTickRun = 0;
- }
- //System.out.println(gui);
- //playerTick(mc.thePlayer);
- }
- return true;
- }
- public boolean OnTickInGame(Minecraft var1) {
- if (inMenu) {
- //System.out.println(lastTickRun);
- if (lastTickRun > 10) {
- doMobList();
- inMenu = false;
- }
- lastTickRun++;
- }
- if (!inMenu) {
- EntityPlayerSP var2 = var1.thePlayer;
- if(var2.health != lastHealth) {
- if(var2.health < lastHealth) {
- //spawnScent(var2);
- }
- lastHealth = var2.health;
- }
- if(var2.health < 12 && lastBleedTime < System.currentTimeMillis()) {
- lastBleedTime = System.currentTimeMillis() + 30000L;
- //spawnScent(var2);
- }
- }
- return true;
- }
- public static Entity getScent(Entity var0) {
- List var1 = var0.worldObj.getEntitiesWithinAABBExcludingEntity(var0, var0.boundingBox.expand((double)MaxPFRange.get().intValue(), (double)MaxPFRange.get().intValue(), (double)MaxPFRange.get().intValue()));
- Entity var2 = null;
- Entity var3 = null;
- Object var4 = null;
- float var5 = 90000.0F;
- float var6 = 90000.0F;
- boolean var7 = false;
- for(int var8 = 0; var8 < var1.size(); ++var8) {
- var2 = (Entity)var1.get(var8);
- if(var2 instanceof EntityScent && var0.getDistanceToEntity(var2) < ((EntityScent)var2).getRange() && var0.getDistanceToEntity(var2) > 5.0F && var0.rand.nextInt(1000) == 0) {
- var3 = var2;
- }
- }
- return var3;
- }
- public static void spawnSoundTrace(String var0, float var1, float var2, float var3, float var4, float var5) {
- //System.out.println("sound: " + var0);
- //TEEEEEMMMMMMMMPPPPPPPPP
- if (!ScentAwareness.get() || traceCount >= 0) { return; }
- if (!canSpawnTrace((int)var1, (int)var2, (int)var3)) {
- return;
- }
- EntityPlayerSP var6 = ModLoader.getMinecraftInstance().thePlayer;
- int var7 = (int)(20.0F * var4);
- boolean var8 = false;
- /*if(var0.substring(7).equals("drr")) {
- var8 = true;
- }*/
- if(var0.substring(7).equals("bow") || var0.substring(7).equals("pop") || var0.substring(7).equals("wood")) {
- return;
- }
- if((var8 || Math.abs(var6.posX - (double)var1) < 3.0D && Math.abs(var6.posY - (double)var6.getEyeHeight() - (double)var2) < 3.0D && Math.abs(var6.posZ - (double)var3) < 3.0D) && var7 > 15) {
- EntityScent var9 = new EntityScent(var6.worldObj);
- if(var7 < 25) {
- var9.setStrength(SoundStrength.get());
- }
- var7 = var9.strength;
- if(var0.substring(7).equals("drr")) {
- var7 += 10;
- }
- if(lastSoundTime + (long)frequentSoundThreshold > System.currentTimeMillis()) {
- lastMultiply += 0.1F;
- var7 = (int)((float)var7 * lastMultiply);
- } else {
- lastMultiply = 1.0F;
- }
- lastSoundTime = System.currentTimeMillis();
- var9.setStrength(var7);
- var9.type = 1;
- var9.setPosition((double)var1, (double)var2, (double)var3);
- var6.worldObj.entityJoinedWorld(var9);
- //System.out.println("sound: " + var0 + " - range: " + var9.getRange());
- //System.out.println(var9.getRange());
- }
- }
- public static void spawnScent(Entity var0) {
- if (!SoundAwareness.get() || traceCount > 75) { return; }
- if (!canSpawnTrace((int)var0.posX, (int)var0.posY, (int)var0.posZ)) {
- return;
- }
- double height = var0.posY - (double)var0.yOffset + 0.0D;
- /*if (var0 instanceof EntityPlayer) {
- height -= 1.0D;
- }*/
- //System.out.println(height);
- EntityScent var1 = new EntityScent(var0.worldObj);
- var1.setPosition(var0.posX, height, var0.posZ);
- var0.worldObj.entityJoinedWorld(var1);
- var1.setStrength(ScentStrength.get());
- var1.type = 0;
- //System.out.println("scent: " + var0 + " - range: " + var1.getRange());
- //System.out.println("?!?!?! - " + var1.type);
- //System.out.println(var1.getRange());
- }
- public static boolean canSpawnTrace(int x, int y, int z) {
- int id = Block.pressurePlatePlanks.blockID;
- if (ModLoader.getMinecraftInstance().theWorld.getBlockId(x-1,y,z) == id) {
- return false;
- }
- /*if (ModLoader.getMinecraftInstance().theWorld.getBlockId(x,y,z) == id) {
- return false;
- }
- if (ModLoader.getMinecraftInstance().theWorld.getBlockId(x+1,y,z) == id) {
- return false;
- }
- if (ModLoader.getMinecraftInstance().theWorld.getBlockId(x,y,z-1) == id) {
- return false;
- }
- if (ModLoader.getMinecraftInstance().theWorld.getBlockId(x,y,z+1) == id) {
- return false;
- }
- if (ModLoader.getMinecraftInstance().theWorld.getBlockId(x,y-1,z) == id) {
- return false;
- }
- if (ModLoader.getMinecraftInstance().theWorld.getBlockId(x,y+1,z) == id) {
- return false;
- }*/
- return true;
- }
- public void AddRenderer(Map var1) {
- var1.put(EntityScent.class, new RenderScent());
- }
- public static boolean useEnt(Entity var0) {
- try {
- return ((Boolean)classToUseMapping.get(var0.getClass())).booleanValue();
- } catch (Exception ex) {
- return false;
- }
- }
- public String Version() {
- return "v1.0 for MC b1.7.3";
- }
- }
- PathfinderEnh.java
- package net.minecraft.src;
- import net.minecraft.src.Block;
- import net.minecraft.src.BlockDoor;
- import net.minecraft.src.Entity;
- import net.minecraft.src.IBlockAccess;
- import net.minecraft.src.MCHash;
- import net.minecraft.src.Material;
- import net.minecraft.src.MathHelper;
- import net.minecraft.src.Path;
- import net.minecraft.src.PathEntity;
- import net.minecraft.src.PathPoint;
- public class PathfinderEnh implements Runnable {
- private IBlockAccess worldMap;
- private Path path = new Path();
- private MCHash pointMap = new MCHash();
- private PathPoint[] pathOptions = new PathPoint[32];
- public boolean foundEnd;
- public boolean canClimb = false;
- public boolean isPathing = false;
- public PathEntity t_path;
- public Entity t_ent;
- public Entity t_targ;
- public float t_dist;
- public ChunkCache cc;
- public boolean firstUse = true;
- public PathfinderEnh(IBlockAccess var1) {
- this.worldMap = var1;
- }
- public void run() {
- //}
- t_path = createEntityPathTo(t_ent, t_targ, t_dist);
- ((EntityCreature)t_ent).setPathToEntity(t_path);
- isPathing = false;
- if (t_path != null) {
- //System.out.println(t_path.points.length);
- }
- }
- public static PathEntity requestPath() {
- //try transparent way:
- //ent asks for path, insta return 1 node path with ent pos Y+4 to keep it still, start thread
- //then once thread has path, replace fake path with actual path
- return null;
- }
- public PathEntity getPathToEntity(Entity var1, Entity var2, float var3) {
- return getPathToEntity(var1, var2, var3, false);
- }
- public PathEntity getPathToEntity(Entity var1, Entity var2, float var3, boolean canClimb) {
- if (!isPathing) {
- isPathing = true;
- //PathfinderEnh pf = new PathfinderEnh(var14);
- if (var1 instanceof EntityHooks) {
- this.canClimb = canClimb;
- //this.worldMap = var14;
- this.t_ent = var1;
- this.t_targ = var2;
- this.t_dist = var3;
- this.t_path = null;
- int var4 = MathHelper.floor_double(t_ent.posX);
- int var5 = MathHelper.floor_double(t_ent.posY);
- int var6 = MathHelper.floor_double(t_ent.posZ);
- int var7 = (int)(t_dist + 16.0F);
- int var8 = var4 - var7;
- int var9 = var5 - var7;
- int var10 = var6 - var7;
- int var11 = var4 + var7;
- int var12 = var5 + var7;
- int var13 = var6 + var7;
- //if (firstUse) {
- //firstUse = false;
- //System.out.println("pf chunkcache!");
- worldMap = new ChunkCache(ModLoader.getMinecraftInstance().theWorld, var8, var9, var10, var11, var12, var13);
- //thread!
- (new Thread(this)).start();
- }
- //return ((EntityHooks)var1).pf.createEntityPathTo(var1, var2, var3);
- } else {
- }
- PathPoint points[] = new PathPoint[1];
- points[0] = new PathPoint((int)(var1.posX-0.5), (int)(var1.posY + 4D), (int)(var1.posZ-0.5));
- return new PathEntity(points);
- }
- public PathEntity getEntityPathToXYZ(Entity var1, int var2, int var3, int var4, float var5) {
- int var6 = MathHelper.floor_double(var1.posX);
- int var7 = MathHelper.floor_double(var1.posY);
- int var8 = MathHelper.floor_double(var1.posZ);
- int var9 = (int)(var5 + 8.0F);
- int var10 = var6 - var9;
- int var11 = var7 - var9;
- int var12 = var8 - var9;
- int var13 = var6 + var9;
- int var14 = var7 + var9;
- int var15 = var8 + var9;
- ChunkCache var16 = new ChunkCache(ModLoader.getMinecraftInstance().theWorld, var10, var11, var12, var13, var14, var15);
- PathfinderEnh pf = new PathfinderEnh(var16);
- pf.canClimb = false;
- return (pf).createEntityPathTo(var1, var2, var3, var4, var5);
- }
- public PathEntity createEntityPathTo(Entity var1, Entity var2, float var3) {
- return this.createEntityPathTo(var1, var2.posX, var2.boundingBox.minY, var2.posZ, var3);
- }
- public PathEntity createEntityPathTo(Entity var1, int var2, int var3, int var4, float var5) {
- return this.createEntityPathTo(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), var5);
- }
- private PathEntity createEntityPathTo(Entity var1, double var2, double var4, double var6, float var8) {
- this.path.clearPath();
- this.pointMap.clearMap();
- foundEnd = false;
- PathPoint var9 = this.openPoint(MathHelper.floor_double(var1.boundingBox.minX), MathHelper.floor_double(var1.boundingBox.minY), MathHelper.floor_double(var1.boundingBox.minZ));
- PathPoint var10 = this.openPoint(MathHelper.floor_double(var2 - (double)(var1.width / 2.0F)), MathHelper.floor_double(var4), MathHelper.floor_double(var6 - (double)(var1.width / 2.0F)));
- PathPoint var11 = new PathPoint(MathHelper.floor_float(var1.width + 1.0F), MathHelper.floor_float(var1.height + 1.0F), MathHelper.floor_float(var1.width + 1.0F));
- PathEntity var12 = this.addToPath(var1, var9, var10, var11, var8);
- if (var12 != null) {
- var12.foundEnd = foundEnd;
- }
- try {
- //Thread.sleep(500L);
- } catch (Throwable ex) {
- }
- return var12;
- }
- private PathEntity addToPath(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) {
- var2.totalPathDistance = 0.0F;
- var2.distanceToNext = var2.distanceTo(var3);
- var2.distanceToTarget = var2.distanceToNext;
- this.path.clearPath();
- this.path.addPoint(var2);
- PathPoint var6 = var2;
- while(!this.path.isPathEmpty()) {
- PathPoint var7 = this.path.dequeue();
- if(var7.equals(var3)) {
- return this.createEntityPath(var2, var3);
- }
- if(var7.distanceTo(var3) < var6.distanceTo(var3)) {
- var6 = var7;
- }
- var7.isFirst = true;
- int var8 = this.findPathOptions(var1, var7, var4, var3, var5);
- for(int var9 = 0; var9 < var8; ++var9) {
- PathPoint var10 = this.pathOptions[var9];
- float var11 = var7.totalPathDistance + var7.distanceTo(var10);
- if(!var10.isAssigned() || var11 < var10.totalPathDistance) {
- var10.previous = var7;
- var10.totalPathDistance = var11;
- var10.distanceToNext = var10.distanceTo(var3);
- if(var10.isAssigned()) {
- this.path.changeDistance(var10, var10.totalPathDistance + var10.distanceToNext);
- } else {
- var10.distanceToTarget = var10.totalPathDistance + var10.distanceToNext;
- this.path.addPoint(var10);
- }
- }
- }
- }
- if (Math.abs(var3.xCoord - var6.xCoord) < 2 && Math.abs(var3.yCoord - var6.yCoord) < 2 && Math.abs(var3.zCoord - var6.zCoord) < 2) {
- foundEnd = true;
- }
- if(var6 == var2) {
- return null;
- } else {
- return this.createEntityPath(var2, var6);
- }
- }
- private int findPathOptions(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) {
- int var6 = 0;
- byte var7 = 0;
- if(this.getVerticalOffset(var1, var2.xCoord, var2.yCoord + 1, var2.zCoord, var3) == 1) {
- var7 = 1;
- }
- PathPoint var8 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord + 1, var3, var7);
- PathPoint var9 = this.getSafePoint(var1, var2.xCoord - 1, var2.yCoord, var2.zCoord, var3, var7);
- PathPoint var10 = this.getSafePoint(var1, var2.xCoord + 1, var2.yCoord, var2.zCoord, var3, var7);
- PathPoint var11 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord - 1, var3, var7);
- if(var8 != null && !var8.isFirst && var8.distanceTo(var4) < var5) {
- this.pathOptions[var6++] = var8;
- }
- if(var9 != null && !var9.isFirst && var9.distanceTo(var4) < var5) {
- this.pathOptions[var6++] = var9;
- }
- if(var10 != null && !var10.isFirst && var10.distanceTo(var4) < var5) {
- this.pathOptions[var6++] = var10;
- }
- if(var11 != null && !var11.isFirst && var11.distanceTo(var4) < var5) {
- this.pathOptions[var6++] = var11;
- }
- if (canClimb) {
- PathPoint vvar8 = this.getClimbPoint(var1, var2.xCoord, var2.yCoord, var2.zCoord + 1, var3, var7, var2.xCoord, var2.zCoord);
- PathPoint vvar9 = this.getClimbPoint(var1, var2.xCoord - 1, var2.yCoord, var2.zCoord, var3, var7, var2.xCoord, var2.zCoord);
- PathPoint vvar10 = this.getClimbPoint(var1, var2.xCoord + 1, var2.yCoord, var2.zCoord, var3, var7, var2.xCoord, var2.zCoord);
- PathPoint vvar11 = this.getClimbPoint(var1, var2.xCoord, var2.yCoord, var2.zCoord - 1, var3, var7, var2.xCoord, var2.zCoord);
- if(vvar8 != null && !vvar8.isFirst && vvar8.distanceTo(var4) < var5) {
- this.pathOptions[var6++] = vvar8;
- }
- if(vvar9 != null && !vvar9.isFirst && vvar9.distanceTo(var4) < var5) {
- this.pathOptions[var6++] = vvar9;
- }
- if(vvar10 != null && !vvar10.isFirst && vvar10.distanceTo(var4) < var5) {
- this.pathOptions[var6++] = vvar10;
- }
- if(vvar11 != null && !vvar11.isFirst && vvar11.distanceTo(var4) < var5) {
- this.pathOptions[var6++] = vvar11;
- }
- }
- return var6;
- }
- private PathPoint getClimbPoint(Entity var1, int x, int y, int z, PathPoint var5, int var6, int origX, int origZ) {
- PathPoint var7 = null;
- if(this.getVerticalOffset(var1, x, y, z, var5) == 1) {
- var7 = this.openPoint(x, y, z);
- }
- if(var7 == null && var6 > 0 && this.getVerticalOffset(var1, x, y + var6, z, var5) == 1) {
- var7 = this.openPoint(x, y + var6, z);
- y += var6;
- }
- if(var7 == null && canClimb) {
- int var8 = 0;
- int var9 = 0;
- int var10 = 0;
- while(y > 0 && y < 128 && (var9 = this.getVerticalOffset(var1, x, y + 1, z, var5)) == 0 && (var10 = this.getVerticalOffset(var1, origX, y + 1, origZ, var5)) == 1) {
- ++var8;
- if(var8 >= 3) {
- return null;
- }
- ++y;
- if(y > 0 && y < 128) {
- var7 = this.openPoint(x, y, z);
- }
- }
- if (var10 != 1) {
- return null;
- }
- if(var9 == -2) {
- return null;
- }
- }
- return var7;
- }
- private PathPoint getSafePoint(Entity var1, int var2, int var3, int var4, PathPoint var5, int var6) {
- PathPoint var7 = null;
- if(this.getVerticalOffset(var1, var2, var3, var4, var5) == 1) {
- var7 = this.openPoint(var2, var3, var4);
- }
- if(var7 == null && var6 > 0 && this.getVerticalOffset(var1, var2, var3 + var6, var4, var5) == 1) {
- var7 = this.openPoint(var2, var3 + var6, var4);
- var3 += var6;
- }
- if(var7 != null) {
- int var8 = 0;
- int var9 = 0;
- while(var3 > 0 && (var9 = this.getVerticalOffset(var1, var2, var3 - 1, var4, var5)) == 1) {
- ++var8;
- if(var8 >= 4) {
- return null;
- }
- --var3;
- if(var3 > 0) {
- var7 = this.openPoint(var2, var3, var4);
- }
- }
- if(var9 == -2) {
- return null;
- }
- }
- return var7;
- }
- private final PathPoint openPoint(int var1, int var2, int var3) {
- int var4 = PathPoint.func_22329_a(var1, var2, var3);
- PathPoint var5 = (PathPoint)this.pointMap.lookup(var4);
- if(var5 == null) {
- var5 = new PathPoint(var1, var2, var3);
- this.pointMap.addKey(var4, var5);
- }
- return var5;
- }
- private int getVerticalOffset(Entity var1, int var2, int var3, int var4, PathPoint var5) {
- for(int var6 = var2; var6 < var2 + var5.xCoord; ++var6) {
- for(int var7 = var3; var7 < var3 + var5.yCoord; ++var7) {
- for(int var8 = var4; var8 < var4 + var5.zCoord; ++var8) {
- int var9 = this.worldMap.getBlockId(var6, var7, var8);
- if(var9 > 0) {
- if(var9 != Block.doorSteel.blockID && var9 != Block.doorWood.blockID) {
- if (var9 == Block.fence.blockID) {
- return -2;
- }
- if (var9 == Block.pressurePlatePlanks.blockID || var9 == Block.pressurePlateStone.blockID) {
- return 1;
- }
- Material var11 = Block.blocksList[var9].blockMaterial;
- if(var11.getIsSolid()) {
- return 0;
- }
- if(var11 == Material.water) {
- return -1;
- }
- if(var11 == Material.lava) {
- return -2;
- }
- } else {
- int var10 = this.worldMap.getBlockMetadata(var6, var7, var8);
- if(!BlockDoor.isOpen(var10)) {
- return 0;
- }
- }
- }
- }
- }
- }
- return 1;
- }
- private PathEntity createEntityPath(PathPoint var1, PathPoint var2) {
- int var3 = 1;
- PathPoint var4;
- for(var4 = var2; var4.previous != null; var4 = var4.previous) {
- ++var3;
- }
- PathPoint[] var5 = new PathPoint[var3];
- var4 = var2;
- --var3;
- for(var5[var3] = var2; var4.previous != null; var5[var3] = var4) {
- var4 = var4.previous;
- --var3;
- }
- return new PathEntity(var5);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement