Advertisement
Corosus

Untitled

Oct 14th, 2011
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 25.35 KB | None | 0 0
  1. //Code from my EntityHooks file (stuff every ai entity has)
  2. //declares
  3. public PathfinderEnh pf;
  4. //constructor
  5. pf = new PathfinderEnh(world);
  6. //and wrapped inside all my pf delay enforcing code
  7. setPathToEntity(pf.getPathToEntity(this, var1, var2, canClimb()));
  8.  
  9. //getPathToEntity() is a mess :>
  10. //ignore the use of tryAgain and isPathing, isPathing is probably pointless
  11.  
  12.  
  13. //PathfinderEnh.java
  14.  
  15. package net.minecraft.src;
  16.  
  17. import net.minecraft.src.Block;
  18. import net.minecraft.src.BlockDoor;
  19. import net.minecraft.src.Entity;
  20. import net.minecraft.src.IBlockAccess;
  21. import net.minecraft.src.MCHash;
  22. import net.minecraft.src.Material;
  23. import net.minecraft.src.MathHelper;
  24. import net.minecraft.src.Path;
  25. import net.minecraft.src.PathEntity;
  26. import net.minecraft.src.PathPoint;
  27. import java.util.LinkedList;
  28. import java.util.Iterator;
  29.  
  30. public class PathfinderEnh implements Runnable {
  31.  
  32.     private IBlockAccess worldMap;
  33.     private Path path = new Path();
  34.     private MCHash pointMap = new MCHash();
  35.     private PathPoint[] pathOptions = new PathPoint[32];
  36.  
  37.     public boolean foundEnd;
  38.     public boolean canClimb = false;
  39.  
  40.     public boolean isPathing = false;
  41.     public PathEntity t_path;
  42.     public Entity t_ent;
  43.     public Entity t_targ;
  44.     public float t_dist;
  45.  
  46.     public ChunkCache cc;
  47.     public boolean firstUse = true;
  48.    
  49.     public boolean tryAgain = false;
  50.  
  51.     public PathfinderEnh(IBlockAccess var1) {
  52.         this.worldMap = var1;
  53.     }
  54.  
  55.     public void run() {
  56.         //}
  57.         t_path = createEntityPathTo(t_ent, t_targ, t_dist);
  58.         ((EntityCreature)t_ent).setPathToEntity(t_path);
  59.         isPathing = false;
  60.  
  61.         if (t_path != null) {
  62.             //System.out.println(t_path.points.length);
  63.         }
  64.     }
  65.  
  66.     public static PathEntity requestPath() {
  67.         //try transparent way:
  68.         //ent asks for path, insta return 1 node path with ent pos Y+4 to keep it still, start thread
  69.         //then once thread has path, replace fake path with actual path
  70.         return null;
  71.     }
  72.  
  73.     public PathEntity getPathToEntity(Entity var1, Entity var2, float var3) {
  74.         return getPathToEntity(var1, var2, var3, false);
  75.     }
  76.  
  77.  
  78.  
  79.     public PathEntity getPathToEntity(Entity var1, Entity var2, float var3, boolean canClimb) {
  80.        
  81.         boolean threaded = true;
  82.         tryAgain = false;
  83.         /*if (mod_PathingActivated.lastPathfindTime < System.currentTimeMillis()) {
  84.             mod_PathingActivated.lastPathfindTime = System.currentTimeMillis() + 200;
  85.         } else {
  86.             tryAgain = true;
  87.             PathPoint points[] = new PathPoint[1];
  88.             points[0] = new PathPoint((int)(var1.posX-0.5), (int)(var1.posY + 4D), (int)(var1.posZ-0.5));
  89.             return new PathEntity(points);
  90.         }*/
  91.         mod_PathingActivated.PFCount++;
  92.         if (!isPathing) {
  93.             isPathing = true;
  94.  
  95.             //PathfinderEnh pf = new PathfinderEnh(var14);
  96.             if (var1 instanceof EntityHooks) {
  97.                 this.canClimb = canClimb;
  98.                 //this.worldMap = var14;
  99.                 this.t_ent = var1;
  100.                 this.t_targ = var2;
  101.                 this.t_dist = var3;
  102.                 this.t_path = null;
  103.                 int var4 = MathHelper.floor_double(t_ent.posX);
  104.                 int var5 = MathHelper.floor_double(t_ent.posY);
  105.                 int var6 = MathHelper.floor_double(t_ent.posZ);
  106.                 int var7 = (int)(t_dist + 16.0F);
  107.                 int var8 = var4 - var7;
  108.                 int var9 = var5 - var7;
  109.                 int var10 = var6 - var7;
  110.                 int var11 = var4 + var7;
  111.                 int var12 = var5 + var7;
  112.                 int var13 = var6 + var7;
  113.                 //if (firstUse) {
  114.                 //firstUse = false;
  115.                 //System.out.println("pf chunkcache!");
  116.                
  117.                 //threaded method!
  118.                 if (threaded) {
  119.                     if (mod_PathingActivated.lastWorldCacheTime < System.currentTimeMillis() || mod_PathingActivated.worldCache == null) {
  120.                         mod_PathingActivated.lastWorldCacheTime = System.currentTimeMillis() + 5000;
  121.                         //mod_PathingActivated.worldCache = new ChunkCache(ModLoader.getMinecraftInstance().theWorld, var8, var9, var10, var11, var12, var13);
  122.                     }
  123.                     //worldMap = mod_PathingActivated.worldCache;
  124.                     worldMap = ModLoader.getMinecraftInstance().theWorld;
  125.                     (new Thread(this)).start();
  126.                 } else {
  127.                     worldMap = new ChunkCache(ModLoader.getMinecraftInstance().theWorld, var8, var9, var10, var11, var12, var13);
  128.                     //worldMap = t_ent.worldObj;
  129.                     t_path = createEntityPathTo(t_ent, t_targ, t_dist);
  130.                     //((EntityCreature)t_ent).setPathToEntity(t_path);
  131.                     isPathing = false; 
  132.                 }
  133.                
  134.                 //non threaded method
  135.                 //worldMap = t_ent.worldObj;
  136.                 //t_path = createEntityPathTo(t_ent, t_targ, t_dist);
  137.                 //((EntityCreature)t_ent).setPathToEntity(t_path);
  138.                 //isPathing = false;
  139.                
  140.                 //TRIM PATHFIND CODE!!
  141.                 //http://pastebin.com/6bGdzFBJ
  142.             }
  143.  
  144.             //return ((EntityHooks)var1).pf.createEntityPathTo(var1, var2, var3);
  145.         } else {
  146.         }
  147.  
  148.         if (threaded) {
  149.             PathPoint points[] = new PathPoint[1];
  150.             points[0] = new PathPoint((int)(var1.posX-0.5), (int)(var1.posY + 4D), (int)(var1.posZ-0.5));
  151.             return new PathEntity(points);
  152.         } else {
  153.             return t_path;
  154.         }
  155.     }
  156.  
  157.     public PathEntity getEntityPathToXYZ(Entity var1, int var2, int var3, int var4, float var5) {
  158.         int var6 = MathHelper.floor_double(var1.posX);
  159.         int var7 = MathHelper.floor_double(var1.posY);
  160.         int var8 = MathHelper.floor_double(var1.posZ);
  161.         int var9 = (int)(var5 + 8.0F);
  162.         int var10 = var6 - var9;
  163.         int var11 = var7 - var9;
  164.         int var12 = var8 - var9;
  165.         int var13 = var6 + var9;
  166.         int var14 = var7 + var9;
  167.         int var15 = var8 + var9;
  168.         ChunkCache var16 = new ChunkCache(ModLoader.getMinecraftInstance().theWorld, var10, var11, var12, var13, var14, var15);
  169.         PathfinderEnh pf = new PathfinderEnh(var16);
  170.         pf.canClimb = false;
  171.         return (pf).createEntityPathTo(var1, var2, var3, var4, var5);
  172.     }
  173.  
  174.     public PathEntity createEntityPathTo(Entity var1, Entity var2, float var3) {
  175.         return this.createEntityPathTo(var1, var2.posX, var2.boundingBox.minY, var2.posZ, var3);
  176.     }
  177.  
  178.     public PathEntity createEntityPathTo(Entity var1, int var2, int var3, int var4, float var5) {
  179.         return this.createEntityPathTo(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), var5);
  180.     }
  181.  
  182.     private PathEntity createEntityPathTo(Entity var1, double var2, double var4, double var6, float var8) {
  183.         this.path.clearPath();
  184.         this.pointMap.clearMap();
  185.         foundEnd = false;
  186.         PathPoint var9 = this.openPoint(MathHelper.floor_double(var1.boundingBox.minX), MathHelper.floor_double(var1.boundingBox.minY), MathHelper.floor_double(var1.boundingBox.minZ));
  187.         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)));
  188.         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));
  189.         PathEntity var12 = this.addToPath(var1, var9, var10, var11, var8);
  190.  
  191.         if (var12 != null) {
  192.             var12.foundEnd = foundEnd;
  193.         }
  194.  
  195.         try {
  196.             //Thread.sleep(500L);
  197.         } catch (Throwable ex) {
  198.         }
  199.        
  200.         var12 = simplifyPath(var12, var11);
  201.  
  202.         return var12;
  203.     }
  204.  
  205.     private PathEntity addToPath(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) {
  206.         var2.totalPathDistance = 0.0F;
  207.         var2.distanceToNext = var2.distanceTo(var3);
  208.         var2.distanceToTarget = var2.distanceToNext;
  209.         this.path.clearPath();
  210.         this.path.addPoint(var2);
  211.         PathPoint var6 = var2;
  212.  
  213.         while(!this.path.isPathEmpty()) {
  214.             PathPoint var7 = this.path.dequeue();
  215.  
  216.             if(var7.equals(var3)) {
  217.                 return this.createEntityPath(var2, var3);
  218.             }
  219.  
  220.             if(var7.distanceTo(var3) < var6.distanceTo(var3)) {
  221.                 var6 = var7;
  222.             }
  223.  
  224.             var7.isFirst = true;
  225.             int var8 = this.findPathOptions(var1, var7, var4, var3, var5);
  226.  
  227.             for(int var9 = 0; var9 < var8; ++var9) {
  228.                 PathPoint var10 = this.pathOptions[var9];
  229.                 float var11 = var7.totalPathDistance + var7.distanceTo(var10);
  230.  
  231.                 if(!var10.isAssigned() || var11 < var10.totalPathDistance) {
  232.                     var10.previous = var7;
  233.                     var10.totalPathDistance = var11;
  234.                     var10.distanceToNext = var10.distanceTo(var3);
  235.  
  236.                     if(var10.isAssigned()) {
  237.                         this.path.changeDistance(var10, var10.totalPathDistance + var10.distanceToNext);
  238.                     } else {
  239.                         var10.distanceToTarget = var10.totalPathDistance + var10.distanceToNext;
  240.                         this.path.addPoint(var10);
  241.                     }
  242.                 }
  243.             }
  244.         }
  245.  
  246.         if (Math.abs(var3.xCoord - var6.xCoord) < 2 && Math.abs(var3.yCoord - var6.yCoord) < 2 && Math.abs(var3.zCoord - var6.zCoord) < 2) {
  247.             foundEnd = true;
  248.         }
  249.  
  250.         if(var6 == var2) {
  251.             return null;
  252.         } else {
  253.             return this.createEntityPath(var2, var6);
  254.         }
  255.     }
  256.  
  257.     private int findPathOptions(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) {
  258.         int var6 = 0;
  259.         byte var7 = 0;
  260.  
  261.         if(this.getVerticalOffset(var1, var2.xCoord, var2.yCoord + 1, var2.zCoord, var3) == 1) {
  262.             var7 = 1;
  263.         }
  264.  
  265.         PathPoint var8 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord + 1, var3, var7);
  266.         PathPoint var9 = this.getSafePoint(var1, var2.xCoord - 1, var2.yCoord, var2.zCoord, var3, var7);
  267.         PathPoint var10 = this.getSafePoint(var1, var2.xCoord + 1, var2.yCoord, var2.zCoord, var3, var7);
  268.         PathPoint var11 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord - 1, var3, var7);
  269.  
  270.         if(var8 != null && !var8.isFirst && var8.distanceTo(var4) < var5) {
  271.             this.pathOptions[var6++] = var8;
  272.         }
  273.  
  274.         if(var9 != null && !var9.isFirst && var9.distanceTo(var4) < var5) {
  275.             this.pathOptions[var6++] = var9;
  276.         }
  277.  
  278.         if(var10 != null && !var10.isFirst && var10.distanceTo(var4) < var5) {
  279.             this.pathOptions[var6++] = var10;
  280.         }
  281.  
  282.         if(var11 != null && !var11.isFirst && var11.distanceTo(var4) < var5) {
  283.             this.pathOptions[var6++] = var11;
  284.         }
  285.  
  286.         if (canClimb) {
  287.             PathPoint vvar8 = this.getClimbPoint(var1, var2.xCoord, var2.yCoord, var2.zCoord + 1, var3, var7, var2.xCoord, var2.zCoord);
  288.             PathPoint vvar9 = this.getClimbPoint(var1, var2.xCoord - 1, var2.yCoord, var2.zCoord, var3, var7, var2.xCoord, var2.zCoord);
  289.             PathPoint vvar10 = this.getClimbPoint(var1, var2.xCoord + 1, var2.yCoord, var2.zCoord, var3, var7, var2.xCoord, var2.zCoord);
  290.             PathPoint vvar11 = this.getClimbPoint(var1, var2.xCoord, var2.yCoord, var2.zCoord - 1, var3, var7, var2.xCoord, var2.zCoord);
  291.  
  292.             if(vvar8 != null && !vvar8.isFirst && vvar8.distanceTo(var4) < var5) {
  293.                 this.pathOptions[var6++] = vvar8;
  294.             }
  295.  
  296.             if(vvar9 != null && !vvar9.isFirst && vvar9.distanceTo(var4) < var5) {
  297.                 this.pathOptions[var6++] = vvar9;
  298.             }
  299.  
  300.             if(vvar10 != null && !vvar10.isFirst && vvar10.distanceTo(var4) < var5) {
  301.                 this.pathOptions[var6++] = vvar10;
  302.             }
  303.  
  304.             if(vvar11 != null && !vvar11.isFirst && vvar11.distanceTo(var4) < var5) {
  305.                 this.pathOptions[var6++] = vvar11;
  306.             }
  307.         }
  308.  
  309.         if (true) {
  310.             if (getBlockId(var2.xCoord, var2.yCoord, var2.zCoord) == Block.ladder.blockID) {
  311.                 PathPoint vvar8 = this.getLadderPoint(var1, var2.xCoord, var2.yCoord, var2.zCoord + 1, var3, var7, var2.xCoord, var2.zCoord);
  312.                 PathPoint vvar9 = this.getLadderPoint(var1, var2.xCoord - 1, var2.yCoord, var2.zCoord, var3, var7, var2.xCoord, var2.zCoord);
  313.                 PathPoint vvar10 = this.getLadderPoint(var1, var2.xCoord + 1, var2.yCoord, var2.zCoord, var3, var7, var2.xCoord, var2.zCoord);
  314.                 PathPoint vvar11 = this.getLadderPoint(var1, var2.xCoord, var2.yCoord, var2.zCoord - 1, var3, var7, var2.xCoord, var2.zCoord);
  315.        
  316.                 if(vvar8 != null && !vvar8.isFirst && vvar8.distanceTo(var4) < var5) {
  317.                     this.pathOptions[var6++] = vvar8;
  318.                 }
  319.        
  320.                 if(vvar9 != null && !vvar9.isFirst && vvar9.distanceTo(var4) < var5) {
  321.                     this.pathOptions[var6++] = vvar9;
  322.                 }
  323.        
  324.                 if(vvar10 != null && !vvar10.isFirst && vvar10.distanceTo(var4) < var5) {
  325.                     this.pathOptions[var6++] = vvar10;
  326.                 }
  327.        
  328.                 if(vvar11 != null && !vvar11.isFirst && vvar11.distanceTo(var4) < var5) {
  329.                     this.pathOptions[var6++] = vvar11;
  330.                 }
  331.             }
  332.         }
  333.  
  334.         return var6;
  335.     }
  336.  
  337.     private PathPoint getLadderPoint(Entity var1, int x, int y, int z, PathPoint var5, int var6, int origX, int origZ) {
  338.         PathPoint var7 = null;
  339.  
  340.         if(this.getVerticalOffset(var1, x, y, z, var5) == 1) {
  341.             var7 = this.openPoint(x, y, z);
  342.         }
  343.  
  344.         if(var7 == null && var6 > 0 && this.getVerticalOffset(var1, x, y + var6, z, var5) == 1) {
  345.             var7 = this.openPoint(x, y + var6, z);
  346.             y += var6;
  347.         }
  348.  
  349.         if(var7 == null) {
  350.             int var8 = 0;
  351.             int var9 = 0;
  352.             int var10 = 0;
  353.  
  354.             //while(y > 0 && y < 128 && (worldMap.getBlockId(x, y + 1, z)) == Block.ladder.blockID && (var10 = this.getVerticalOffset(var1, origX, y + 1, origZ, var5)) == 1) {
  355.             while(y > 0 && y < 128 && ((var9 = this.getVerticalOffset(var1, x, y + 1, z, var5)) == 0) && (getBlockId(origX, y + 1, origZ)) == Block.ladder.blockID) {
  356.                 var10 = this.getVerticalOffset(var1, origX, y + 1, origZ, var5);
  357.                 ++var8;
  358.                 /*if(var8 >= 3) {
  359.                    return null;
  360.                 }*/
  361.                 ++y;
  362.  
  363.                 if(y > 0 && y < 128) {
  364.                     var7 = this.openPoint(x, y, z);
  365.                 }
  366.             }
  367.  
  368.             if (var10 != 1) {
  369.                 return null;
  370.             }
  371.  
  372.             if(var9 == -2) {
  373.                 return null;
  374.             }
  375.         }
  376.  
  377.         return var7;
  378.     }
  379.  
  380.     private PathPoint getClimbPoint(Entity var1, int x, int y, int z, PathPoint var5, int var6, int origX, int origZ) {
  381.         PathPoint var7 = null;
  382.  
  383.         if(this.getVerticalOffset(var1, x, y, z, var5) == 1) {
  384.             var7 = this.openPoint(x, y, z);
  385.         }
  386.  
  387.         if(var7 == null && var6 > 0 && this.getVerticalOffset(var1, x, y + var6, z, var5) == 1) {
  388.             var7 = this.openPoint(x, y + var6, z);
  389.             y += var6;
  390.         }
  391.  
  392.         if(var7 == null && canClimb) {
  393.             int var8 = 0;
  394.             int var9 = 0;
  395.             int var10 = 0;
  396.  
  397.             //while(y > 0 && y < 128 && (worldMap.getBlockId(x, y + 1, z)) == Block.ladder.blockID && (var10 = this.getVerticalOffset(var1, origX, y + 1, origZ, var5)) == 1) {
  398.             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) {
  399.                 //;
  400.                 ++var8;
  401.  
  402.                 if(var8 >= 3) {
  403.                     return null;
  404.                 }
  405.  
  406.                 ++y;
  407.  
  408.                 if(y > 0 && y < 128) {
  409.                     var7 = this.openPoint(x, y, z);
  410.                 }
  411.             }
  412.  
  413.             if (var10 != 1) {
  414.                 return null;
  415.             }
  416.  
  417.             if(var9 == -2) {
  418.                 return null;
  419.             }
  420.         }
  421.  
  422.         return var7;
  423.     }
  424.  
  425.     private PathPoint getSafePoint(Entity var1, int var2, int var3, int var4, PathPoint var5, int var6) {
  426.         PathPoint var7 = null;
  427.  
  428.         if(this.getVerticalOffset(var1, var2, var3, var4, var5) == 1) {
  429.             var7 = this.openPoint(var2, var3, var4);
  430.         }
  431.  
  432.         if(var7 == null && var6 > 0 && this.getVerticalOffset(var1, var2, var3 + var6, var4, var5) == 1) {
  433.             var7 = this.openPoint(var2, var3 + var6, var4);
  434.             var3 += var6;
  435.         }
  436.  
  437.         if(var7 != null) {
  438.             int var8 = 0;
  439.             int var9 = 0;
  440.  
  441.             while(var3 > 0 && (var9 = this.getVerticalOffset(var1, var2, var3 - 1, var4, var5)) == 1) {
  442.                 ++var8;
  443.  
  444.                 if(var8 >= 4) {
  445.                     return null;
  446.                 }
  447.  
  448.                 --var3;
  449.  
  450.                 if(var3 > 0) {
  451.                     var7 = this.openPoint(var2, var3, var4);
  452.                 }
  453.             }
  454.  
  455.             if(var9 == -2) {
  456.                 return null;
  457.             }
  458.         }
  459.  
  460.         return var7;
  461.     }
  462.  
  463.     private final PathPoint openPoint(int var1, int var2, int var3) {
  464.         int var4 = PathPoint.func_22329_a(var1, var2, var3);
  465.         PathPoint var5 = (PathPoint)this.pointMap.lookup(var4);
  466.  
  467.         if(var5 == null) {
  468.             var5 = new PathPoint(var1, var2, var3);
  469.             this.pointMap.addKey(var4, var5);
  470.         }
  471.  
  472.         return var5;
  473.     }
  474.  
  475.     private int getVerticalOffset(Entity var1, int var2, int var3, int var4, PathPoint var5) {
  476.         for(int var6 = var2; var6 < var2 + var5.xCoord; ++var6) {
  477.             for(int var7 = var3; var7 < var3 + var5.yCoord; ++var7) {
  478.                 for(int var8 = var4; var8 < var4 + var5.zCoord; ++var8) {
  479.                     int var9 = getBlockId(var6, var7, var8);
  480.  
  481.                     if(var9 > 0) {
  482.                         if(var9 != Block.doorSteel.blockID && var9 != Block.doorWood.blockID) {
  483.                             if (var9 == Block.fence.blockID) {
  484.                                 return -2;
  485.                             }
  486.  
  487.                             if (var9 == Block.pressurePlatePlanks.blockID || var9 == Block.pressurePlateStone.blockID) {
  488.                                 return 1;
  489.                             }
  490.  
  491.                             Material var11 = Block.blocksList[var9].blockMaterial;
  492.  
  493.                             if(var11.getIsSolid()) {
  494.                                 return 0;
  495.                             }
  496.  
  497.                             if(var11 == Material.water) {
  498.                                 return -1;
  499.                             }
  500.  
  501.                             if(var11 == Material.lava) {
  502.                                 return -2;
  503.                             }
  504.                         } else {
  505.                             int var10 = getBlockMetadata(var6, var7, var8);
  506.  
  507.                             if(!BlockDoor.isOpen(var10)) {
  508.                                 return 0;
  509.                             }
  510.                         }
  511.                     }
  512.                 }
  513.             }
  514.         }
  515.  
  516.         return 1;
  517.     }
  518.  
  519.     private PathEntity createEntityPath(PathPoint var1, PathPoint var2) {
  520.         int var3 = 1;
  521.         PathPoint var4;
  522.  
  523.         for(var4 = var2; var4.previous != null; var4 = var4.previous) {
  524.             ++var3;
  525.         }
  526.  
  527.         PathPoint[] var5 = new PathPoint[var3];
  528.         var4 = var2;
  529.         --var3;
  530.  
  531.         for(var5[var3] = var2; var4.previous != null; var5[var3] = var4) {
  532.             var4 = var4.previous;
  533.             --var3;
  534.         }
  535.  
  536.         return new PathEntity(var5);
  537.     }
  538.    
  539.     private PathEntity simplifyPath(PathEntity pathentity, PathPoint pathpoint)
  540.     {
  541.         if(pathentity == null)
  542.         {
  543.             return pathentity;
  544.         }
  545.         LinkedList linkedlist = new LinkedList();
  546.         PathPoint pathpoint1 = null;
  547.         PathPoint pathpoint2 = null;
  548.         PathPoint pathpoint3 = null;
  549.         //PathPoint apathpoint[] = (PathPoint)pathentity.points;
  550.         PathPoint apathpoint[] = pathentity.points;
  551.         int j = apathpoint.length;
  552.         for(int k = 0; k < j; k++)
  553.         {
  554.             PathPoint pathpoint4 = apathpoint[k];
  555.             if(pathpoint1 == null)
  556.             {
  557.                 pathpoint1 = pathpoint4;
  558.                 linkedlist.add(pathpoint4);
  559.                 continue;
  560.             }
  561.             if(pathpoint2 == null)
  562.             {
  563.                 if(pathpoint1.yCoord != pathpoint4.yCoord)
  564.                 {
  565.                     pathpoint1 = pathpoint4;
  566.                     linkedlist.add(pathpoint4);
  567.                 } else
  568.                 {
  569.                     pathpoint2 = pathpoint4;
  570.                 }
  571.                 continue;
  572.             }
  573.             if(pathpoint2.yCoord != pathpoint4.yCoord)
  574.             {
  575.                 linkedlist.add(pathpoint2);
  576.                 linkedlist.add(pathpoint4);
  577.                 pathpoint1 = pathpoint4;
  578.                 pathpoint2 = null;
  579.                 continue;
  580.             }
  581.             int l = pathpoint4.xCoord - pathpoint1.xCoord;
  582.             int i1 = pathpoint4.zCoord - pathpoint1.zCoord;
  583.             if(Math.abs(l) < Math.abs(i1))
  584.             {
  585.                 float f = 0.0F;
  586.                 float f2 = (float)l / (float)Math.abs(i1);
  587.                 byte byte0 = 1;
  588.                 if(i1 < 0)
  589.                 {
  590.                     byte0 = -1;
  591.                 }
  592.                 for(int j1 = 1; j1 < Math.abs(i1); j1++)
  593.                 {
  594.                     if(getVerticalOffset(null, pathpoint1.xCoord + (int)f, pathpoint1.yCoord, pathpoint1.zCoord + j1 * byte0, pathpoint) != 1 || getVerticalOffset(null, pathpoint1.xCoord + (int)f, pathpoint1.yCoord - 1, pathpoint1.zCoord + j1 * byte0, pathpoint) == 1 || getVerticalOffset(null, pathpoint1.xCoord + (int)f + 1, pathpoint1.yCoord, pathpoint1.zCoord + j1 * byte0, pathpoint) != 1 || getVerticalOffset(null, pathpoint1.xCoord + (int)f + 1, pathpoint1.yCoord - 1, pathpoint1.zCoord + j1 * byte0, pathpoint) == 1 || getVerticalOffset(null, (pathpoint1.xCoord + (int)f) - 1, pathpoint1.yCoord, pathpoint1.zCoord + j1 * byte0, pathpoint) != 1 || getVerticalOffset(null, (pathpoint1.xCoord + (int)f) - 1, pathpoint1.yCoord - 1, pathpoint1.zCoord + j1 * byte0, pathpoint) == 1)
  595.                     {
  596.                         pathpoint1 = pathpoint2;
  597.                         linkedlist.add(pathpoint2);
  598.                         pathpoint2 = pathpoint4;
  599.                     } else
  600.                     {
  601.                         f += f2;
  602.                     }
  603.                 }
  604.  
  605.             } else
  606.             {
  607.                 float f1 = 0.0F;
  608.                 float f3 = (float)i1 / (float)Math.abs(l);
  609.                 byte byte1 = 1;
  610.                 if(l < 0)
  611.                 {
  612.                     byte1 = -1;
  613.                 }
  614.                 for(int k1 = 1; k1 < Math.abs(l); k1++)
  615.                 {
  616.                     if(getVerticalOffset(null, pathpoint1.xCoord + k1 * byte1, pathpoint1.yCoord, pathpoint1.zCoord + (int)f1, pathpoint) != 1 || getVerticalOffset(null, pathpoint1.xCoord + k1 * byte1, pathpoint1.yCoord - 1, pathpoint1.zCoord + (int)f1, pathpoint) == 1 || getVerticalOffset(null, pathpoint1.xCoord + k1 * byte1, pathpoint1.yCoord, pathpoint1.zCoord + (int)f1 + 1, pathpoint) != 1 || getVerticalOffset(null, pathpoint1.xCoord + k1 * byte1, pathpoint1.yCoord - 1, pathpoint1.zCoord + (int)f1 + 1, pathpoint) == 1 || getVerticalOffset(null, pathpoint1.xCoord + k1 * byte1, pathpoint1.yCoord, (pathpoint1.zCoord + (int)f1) - 1, pathpoint) != 1 || getVerticalOffset(null, pathpoint1.xCoord + k1 * byte1, pathpoint1.yCoord - 1, (pathpoint1.zCoord + (int)f1) - 1, pathpoint) == 1)
  617.                     {
  618.                         pathpoint1 = pathpoint2;
  619.                         linkedlist.add(pathpoint2);
  620.                         pathpoint2 = pathpoint4;
  621.                     } else
  622.                     {
  623.                         f1 += f3;
  624.                     }
  625.                 }
  626.  
  627.             }
  628.             pathpoint3 = pathpoint4;
  629.         }
  630.  
  631.         if(pathpoint3 != null)
  632.         {
  633.             linkedlist.add(pathpoint3);
  634.         } else
  635.         if(pathpoint2 != null)
  636.         {
  637.             linkedlist.add(pathpoint2);
  638.         }
  639.         int i = 0;
  640.         PathPoint apathpoint1[] = new PathPoint[linkedlist.size()];
  641.         for(Iterator iterator = linkedlist.iterator(); iterator.hasNext();)
  642.         {
  643.             PathPoint pathpoint5 = (PathPoint)iterator.next();
  644.             apathpoint1[i++] = pathpoint5;
  645.         }
  646.         return new PathEntity(apathpoint1);
  647.     }
  648.    
  649.     private int getBlockId(int x, int y, int z) {
  650.         if (!ModLoader.getMinecraftInstance().theWorld.checkChunksExist(x, 0, z , x, 128, z)) return 10;
  651.         return ModLoader.getMinecraftInstance().theWorld.getBlockId(x, y, z);
  652.     }
  653.    
  654.     private int getBlockMetadata(int x, int y, int z) {
  655.         if (!ModLoader.getMinecraftInstance().theWorld.checkChunksExist(x, 0, z , x, 128, z)) return 0;
  656.         return ModLoader.getMinecraftInstance().theWorld.getBlockMetadata(x, y, z);
  657.     }
  658. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement