Greenadine

PathfinderGoalAvoidScarecrow.java

Sep 17th, 2017
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.33 KB | None | 0 0
  1. package me.greenadine.scarecrow.nms;
  2.  
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Method;
  5. import java.util.List;
  6.  
  7. import org.bukkit.entity.Entity;
  8.  
  9. import com.google.common.base.Predicate;
  10. import com.google.common.base.Predicates;
  11.  
  12. import net.minecraft.server.v1_12_R1.AxisAlignedBB;
  13. import net.minecraft.server.v1_12_R1.EntityCreature;
  14. import net.minecraft.server.v1_12_R1.EntityLiving;
  15. import net.minecraft.server.v1_12_R1.IEntitySelector;
  16. import net.minecraft.server.v1_12_R1.NavigationAbstract;
  17. import net.minecraft.server.v1_12_R1.PathEntity;
  18. import net.minecraft.server.v1_12_R1.PathfinderGoal;
  19. import net.minecraft.server.v1_12_R1.RandomPositionGenerator;
  20. import net.minecraft.server.v1_12_R1.Vec3D;
  21.  
  22. public class PathfinderGoalAvoidScarecrow<T extends Entity> extends PathfinderGoal {
  23.    
  24.     private final Predicate<Entity> c = Predicates.alwaysTrue();
  25.  
  26.     protected EntityCreature a;
  27.    
  28.     private final net.minecraft.server.v1_12_R1.World w;
  29.  
  30.     private final double  d;
  31.  
  32.     private final double e;
  33.    
  34.     private final double lastX;
  35.     private final double lastY;
  36.     private final double lastZ;
  37.  
  38.     protected T b;
  39.  
  40.     private final float f;
  41.     private PathEntity g;
  42.     private final NavigationAbstract h;
  43.     private final AxisAlignedBB aA;
  44.     private final Class<T> i;
  45.     private Predicate<? super T> j;
  46.    
  47.     public PathfinderGoalAvoidScarecrow(EntityCreature paramEntityCreature, net.minecraft.server.v1_12_R1.World paramWorld, NavigationAbstract paramNavigationAbstract, AxisAlignedBB paramAxisAlignedBB,
  48.             float paramFloat, double paramDouble1, double paramDouble2, Class<T> paramClass, double paramLastX, double paramLastY, double paramLastZ, Predicate<? super T> paramPredicate)
  49.     {
  50.         a = paramEntityCreature;
  51.         w = paramWorld;
  52.         h = paramNavigationAbstract;
  53.         aA = paramAxisAlignedBB;
  54.         f = paramFloat;
  55.         d = paramDouble1;
  56.         e = paramDouble2;
  57.         i = paramClass;
  58.         j = paramPredicate;
  59.         lastX = paramLastX;
  60.         lastY = paramLastY;
  61.         lastZ = paramLastZ;
  62.     }
  63.  
  64.     @SuppressWarnings("unchecked")
  65.     public boolean a()
  66.     {
  67.         @SuppressWarnings("rawtypes")
  68.         List localList = (List) w.a((Class) i, aA.grow(f, 3.0D, f), (net.minecraft.server.v1_12_R1.Entity) Predicates.and(new Predicate[] { IEntitySelector.d, c, j }));
  69.         if (localList.isEmpty()) {
  70.             return false;
  71.         }
  72.         b = (T) ((Entity)localList.get(0));
  73.    
  74.         Vec3D localVec3D = RandomPositionGenerator.b(a, 16, 7, new Vec3D(b.getLocation().getX(), b.getLocation().getY(), b.getLocation().getZ()));
  75.         if (localVec3D == null) {
  76.             return false;
  77.         }
  78.    
  79.         try {
  80.             Method method = b.getClass().getMethod("c", Double.class, Double.class, Double.class);
  81.        
  82.             if ((double) method.invoke(lastX, lastY, lastZ) < ((EntityLiving) b).h(a)) {
  83.                 return false;
  84.                 }
  85.                 g = h.a(lastX, lastY, lastZ);
  86.                 return g != null;
  87.         } catch(Exception e) {
  88.             e.printStackTrace();
  89.             return false;
  90.         }
  91.     }
  92.  
  93.     public boolean b()
  94.     {
  95.         return !h.o();
  96.     }
  97.  
  98.     public void c()
  99.     {
  100.         h.a(g, d);
  101.     }
  102.  
  103.     public void d()
  104.     {
  105.         b = null;
  106.     }
  107.  
  108.     public void e()
  109.     {
  110.         try {
  111.             Field field = a.getClass().getDeclaredField("b");
  112.             field.setAccessible(true);
  113.             if (field.getFloat(a) < 49.0D) {
  114.                 a.getNavigation().a(e);
  115.             } else {
  116.                 a.getNavigation().a(d);      
  117.             }
  118.         } catch(Exception e) {
  119.             e.printStackTrace();
  120.         }
  121.     }
  122. }
Advertisement
Add Comment
Please, Sign In to add comment