Yeah, add support for multiple entities, but only add the last one.

Even I gotta admit that was really dumb of my part.
Also fixed the "ADD" changer in ExprNBTListContents, needs testing.
This commit is contained in:
TheBukor 2016-03-06 03:22:10 -03:00
parent f046b64367
commit 1f5b4f42ce
2 changed files with 59 additions and 52 deletions

View File

@ -161,7 +161,7 @@ public class EffSetPathGoal extends Effect {
Object obcEnt = craftLivEnt.cast(ent); Object obcEnt = craftLivEnt.cast(ent);
Object nmsEnt = null; Object nmsEnt = null;
boolean target = false; boolean target = false;
Object newGoal = null; List<Object> newGoals = new ArrayList<Object>();
try { try {
nmsEnt = entInsent.cast(obcEnt.getClass().getMethod("getHandle").invoke(obcEnt)); nmsEnt = entInsent.cast(obcEnt.getClass().getMethod("getHandle").invoke(obcEnt));
if (mark == 0) { if (mark == 0) {
@ -173,34 +173,34 @@ public class EffSetPathGoal extends Effect {
Class<?> goalRabbitAvoid = ReflectionUtils.getNMSClass("EntityRabbit$PathfinderGoalRabbitAvoidTarget"); Class<?> goalRabbitAvoid = ReflectionUtils.getNMSClass("EntityRabbit$PathfinderGoalRabbitAvoidTarget");
for (EntityData<?> entData : types) { for (EntityData<?> entData : types) {
if (LivingEntity.class.isAssignableFrom(entData.getType())) if (LivingEntity.class.isAssignableFrom(entData.getType()))
newGoal = goalRabbitAvoid.getDeclaredConstructor(nmsEnt.getClass(), Class.class, float.class, double.class, double.class).newInstance(nmsEnt, entData.getType(), radius, spd, nearSpd); newGoals.add(goalRabbitAvoid.getDeclaredConstructor(nmsEnt.getClass(), Class.class, float.class, double.class, double.class).newInstance(nmsEnt, entData.getType(), radius, spd, nearSpd));
} }
} else { } else {
Class<?> goalAvoid = ReflectionUtils.getNMSClass("PathfinderGoalAvoidTarget"); Class<?> goalAvoid = ReflectionUtils.getNMSClass("PathfinderGoalAvoidTarget");
for (EntityData<?> entData : types) { for (EntityData<?> entData : types) {
if (LivingEntity.class.isAssignableFrom(entData.getType())) if (LivingEntity.class.isAssignableFrom(entData.getType()))
newGoal = goalAvoid.getConstructor(entCreature, Class.class, float.class, double.class, double.class).newInstance(nmsEnt, entData.getType(), radius, spd, nearSpd); newGoals.add(goalAvoid.getConstructor(entCreature, Class.class, float.class, double.class, double.class).newInstance(nmsEnt, entData.getType(), radius, spd, nearSpd));
} }
} }
} else if (mark == 1) { } else if (mark == 1) {
Class<?> goalBreakDoor = ReflectionUtils.getNMSClass("PathfinderGoalBreakDoor"); Class<?> goalBreakDoor = ReflectionUtils.getNMSClass("PathfinderGoalBreakDoor");
newGoal = goalBreakDoor.getConstructor(entInsent).newInstance(nmsEnt); newGoals.add(goalBreakDoor.getConstructor(entInsent).newInstance(nmsEnt));
} else if (mark == 2) { } else if (mark == 2) {
if (!(ent instanceof Animals)) if (!(ent instanceof Animals))
return; return;
double spd = (breedSpeed == null ? 1.0D : breedSpeed.getSingle(e).doubleValue()); double spd = (breedSpeed == null ? 1.0D : breedSpeed.getSingle(e).doubleValue());
Class<?> goalBreed = ReflectionUtils.getNMSClass("PathfinderGoalBreed"); Class<?> goalBreed = ReflectionUtils.getNMSClass("PathfinderGoalBreed");
newGoal = goalBreed.getConstructor(entAnimal, double.class).newInstance(nmsEnt, spd); newGoals.add(goalBreed.getConstructor(entAnimal, double.class).newInstance(nmsEnt, spd));
} else if (mark == 3) { } else if (mark == 3) {
Class<?> goalEatGrass = ReflectionUtils.getNMSClass("PathfinderGoalEatTile"); Class<?> goalEatGrass = ReflectionUtils.getNMSClass("PathfinderGoalEatTile");
newGoal = goalEatGrass.getConstructor(entInsent).newInstance(nmsEnt); newGoals.add(goalEatGrass.getConstructor(entInsent).newInstance(nmsEnt));
} else if (mark == 4) { } else if (mark == 4) {
double spd = (fleeSunSpeed == null ? 1.0D : fleeSunSpeed.getSingle(e).doubleValue()); double spd = (fleeSunSpeed == null ? 1.0D : fleeSunSpeed.getSingle(e).doubleValue());
Class<?> goalFleeSun = ReflectionUtils.getNMSClass("PathfinderGoalFleeSun"); Class<?> goalFleeSun = ReflectionUtils.getNMSClass("PathfinderGoalFleeSun");
newGoal = goalFleeSun.getConstructor(entCreature, double.class).newInstance(nmsEnt, spd); newGoals.add(goalFleeSun.getConstructor(entCreature, double.class).newInstance(nmsEnt, spd));
} else if (mark == 5) { } else if (mark == 5) {
Class<?> goalFloat = ReflectionUtils.getNMSClass("PathfinderGoalFloat"); Class<?> goalFloat = ReflectionUtils.getNMSClass("PathfinderGoalFloat");
newGoal = goalFloat.getConstructor(entInsent).newInstance(nmsEnt); newGoals.add(goalFloat.getConstructor(entInsent).newInstance(nmsEnt));
} else if (mark == 6) { } else if (mark == 6) {
if (!(ent instanceof Tameable)) if (!(ent instanceof Tameable))
return; return;
@ -208,13 +208,13 @@ public class EffSetPathGoal extends Effect {
float minDist = (followMinDist == null ? 3.0F : followMinDist.getSingle(e).floatValue()); float minDist = (followMinDist == null ? 3.0F : followMinDist.getSingle(e).floatValue());
float maxDist = (followMaxDist == null ? 10.0F : followMaxDist.getSingle(e).floatValue()); float maxDist = (followMaxDist == null ? 10.0F : followMaxDist.getSingle(e).floatValue());
Class<?> goalFollowOwner = ReflectionUtils.getNMSClass("PathfinderGoalFollowOwner"); Class<?> goalFollowOwner = ReflectionUtils.getNMSClass("PathfinderGoalFollowOwner");
newGoal = goalFollowOwner.getConstructor(entTameable, double.class, float.class, float.class).newInstance(nmsEnt, spd, maxDist, minDist); newGoals.add(goalFollowOwner.getConstructor(entTameable, double.class, float.class, float.class).newInstance(nmsEnt, spd, maxDist, minDist));
} else if (mark == 7) { } else if (mark == 7) {
if (!(ent instanceof Animals)) if (!(ent instanceof Animals))
return; return;
double spd = (followAdultsSpeed == null ? 1.0D : followAdultsSpeed.getSingle(e).doubleValue()); double spd = (followAdultsSpeed == null ? 1.0D : followAdultsSpeed.getSingle(e).doubleValue());
Class<?> goalFollowAdults = ReflectionUtils.getNMSClass("PathfinderGoalFollowParent"); Class<?> goalFollowAdults = ReflectionUtils.getNMSClass("PathfinderGoalFollowParent");
newGoal = goalFollowAdults.getConstructor(entAnimal, double.class).newInstance(nmsEnt, spd); newGoals.add(goalFollowAdults.getConstructor(entAnimal, double.class).newInstance(nmsEnt, spd));
} else if (mark == 8) { } else if (mark == 8) {
target = true; target = true;
boolean callHelp = (callForHelp == null ? false : callForHelp.getSingle(e)); boolean callHelp = (callForHelp == null ? false : callForHelp.getSingle(e));
@ -226,24 +226,24 @@ public class EffSetPathGoal extends Effect {
} }
Class<?>[] finalTypes = Arrays.copyOf(typesClasses.toArray(), typesClasses.size(), Class[].class); Class<?>[] finalTypes = Arrays.copyOf(typesClasses.toArray(), typesClasses.size(), Class[].class);
Class<?> goalReactAttack = ReflectionUtils.getNMSClass("PathfinderGoalHurtByTarget"); Class<?> goalReactAttack = ReflectionUtils.getNMSClass("PathfinderGoalHurtByTarget");
newGoal = goalReactAttack.getConstructor(entCreature, boolean.class, Class[].class).newInstance(nmsEnt, callHelp, finalTypes); newGoals.add(goalReactAttack.getConstructor(entCreature, boolean.class, Class[].class).newInstance(nmsEnt, callHelp, finalTypes));
} else if (mark == 9) { } else if (mark == 9) {
if (!(ent instanceof Ocelot)) if (!(ent instanceof Ocelot))
return; return;
double spd = (jumpOnBlockSpeed == null ? 1.0D : jumpOnBlockSpeed.getSingle(e).doubleValue()); double spd = (jumpOnBlockSpeed == null ? 1.0D : jumpOnBlockSpeed.getSingle(e).doubleValue());
Class<?> goalJumpOnBlock = ReflectionUtils.getNMSClass("PathfinderGoalJumpOnBlock"); Class<?> goalJumpOnBlock = ReflectionUtils.getNMSClass("PathfinderGoalJumpOnBlock");
newGoal = goalJumpOnBlock.getConstructor(nmsEnt.getClass(), double.class).newInstance(nmsEnt, spd); newGoals.add(goalJumpOnBlock.getConstructor(nmsEnt.getClass(), double.class).newInstance(nmsEnt, spd));
} else if (mark == 10) { } else if (mark == 10) {
float height = (leapHeight == null ? 0.4F : leapHeight.getSingle(e).floatValue()); float height = (leapHeight == null ? 0.4F : leapHeight.getSingle(e).floatValue());
Class<?> goalLeapTarget = ReflectionUtils.getNMSClass("PathfinderGoalLeapAtTarget"); Class<?> goalLeapTarget = ReflectionUtils.getNMSClass("PathfinderGoalLeapAtTarget");
newGoal = goalLeapTarget.getConstructor(entInsent, float.class).newInstance(nmsEnt, height); newGoals.add(goalLeapTarget.getConstructor(entInsent, float.class).newInstance(nmsEnt, height));
} else if (mark == 11) { } else if (mark == 11) {
float radius = (lookRadius == null ? 1.0F : lookRadius.getSingle(e).floatValue()); float radius = (lookRadius == null ? 1.0F : lookRadius.getSingle(e).floatValue());
EntityData<?>[] types = lookType.getAll(e); EntityData<?>[] types = lookType.getAll(e);
Class<?> goalLookEntities = ReflectionUtils.getNMSClass("PathfinderGoalLookAtPlayer"); Class<?> goalLookEntities = ReflectionUtils.getNMSClass("PathfinderGoalLookAtPlayer");
for (EntityData<?> entData : types) { for (EntityData<?> entData : types) {
if (LivingEntity.class.isAssignableFrom(entData.getType())) if (LivingEntity.class.isAssignableFrom(entData.getType()))
newGoal = goalLookEntities.getConstructor(entInsent, Class.class, float.class).newInstance(nmsEnt, entData.getType(), radius); newGoals.add(goalLookEntities.getConstructor(entInsent, Class.class, float.class).newInstance(nmsEnt, entData.getType(), radius));
} }
} else if (mark == 12) { } else if (mark == 12) {
EntityData<?>[] types = meleeTarget.getAll(e); EntityData<?>[] types = meleeTarget.getAll(e);
@ -251,7 +251,7 @@ public class EffSetPathGoal extends Effect {
Class<?> goalSpiderMelee = ReflectionUtils.getNMSClass("EntitySpider$PathfinderGoalSpiderMeleeAttack"); Class<?> goalSpiderMelee = ReflectionUtils.getNMSClass("EntitySpider$PathfinderGoalSpiderMeleeAttack");
for (EntityData<?> entData : types) { for (EntityData<?> entData : types) {
if (LivingEntity.class.isAssignableFrom(entData.getType())) if (LivingEntity.class.isAssignableFrom(entData.getType()))
newGoal = ReflectionUtils.getConstructor(goalSpiderMelee, nmsEnt.getClass(), Class.class).newInstance(nmsEnt, entData.getType()); newGoals.add(ReflectionUtils.getConstructor(goalSpiderMelee, nmsEnt.getClass(), Class.class).newInstance(nmsEnt, entData.getType()));
} }
} else { } else {
double spd = (meleeSpeed == null ? 1.0D : meleeSpeed.getSingle(e).doubleValue()); double spd = (meleeSpeed == null ? 1.0D : meleeSpeed.getSingle(e).doubleValue());
@ -259,14 +259,14 @@ public class EffSetPathGoal extends Effect {
Class<?> goalMeleeAttack = ReflectionUtils.getNMSClass("PathfinderGoalMeleeAttack"); Class<?> goalMeleeAttack = ReflectionUtils.getNMSClass("PathfinderGoalMeleeAttack");
for (EntityData<?> entData : types) { for (EntityData<?> entData : types) {
if (LivingEntity.class.isAssignableFrom(entData.getType())) if (LivingEntity.class.isAssignableFrom(entData.getType()))
newGoal = goalMeleeAttack.getConstructor(entCreature, Class.class, double.class, boolean.class).newInstance(nmsEnt, entData.getType(), spd, memorize); newGoals.add(goalMeleeAttack.getConstructor(entCreature, Class.class, double.class, boolean.class).newInstance(nmsEnt, entData.getType(), spd, memorize));
} }
} }
} else if (mark == 13) { } else if (mark == 13) {
double spd = (moveTargetSpeed == null ? 1.0D : moveTargetSpeed.getSingle(e).doubleValue()); double spd = (moveTargetSpeed == null ? 1.0D : moveTargetSpeed.getSingle(e).doubleValue());
float radius = (moveTargetRadius == null ? 32.0F : moveTargetRadius.getSingle(e).floatValue()); float radius = (moveTargetRadius == null ? 32.0F : moveTargetRadius.getSingle(e).floatValue());
Class<?> goalGotoTarget = ReflectionUtils.getNMSClass("PathfinderGoalMoveTowardsTarget"); Class<?> goalGotoTarget = ReflectionUtils.getNMSClass("PathfinderGoalMoveTowardsTarget");
newGoal = goalGotoTarget.getConstructor(entCreature, double.class, float.class).newInstance(nmsEnt, spd, radius); newGoals.add(goalGotoTarget.getConstructor(entCreature, double.class, float.class).newInstance(nmsEnt, spd, radius));
} else if (mark == 14) { } else if (mark == 14) {
target = true; target = true;
EntityData<?>[] types = nearTarget.getAll(e); EntityData<?>[] types = nearTarget.getAll(e);
@ -274,98 +274,98 @@ public class EffSetPathGoal extends Effect {
Class<?> goalSpiderNearTarget = ReflectionUtils.getNMSClass("EntitySpider$PathfinderGoalSpiderNearestAttackableTarget"); Class<?> goalSpiderNearTarget = ReflectionUtils.getNMSClass("EntitySpider$PathfinderGoalSpiderNearestAttackableTarget");
for (EntityData<?> entData : types) { for (EntityData<?> entData : types) {
if (LivingEntity.class.isAssignableFrom(entData.getType())) if (LivingEntity.class.isAssignableFrom(entData.getType()))
newGoal = ReflectionUtils.getConstructor(goalSpiderNearTarget, nmsEnt.getClass(), Class.class).newInstance(nmsEnt, entData.getType()); newGoals.add(ReflectionUtils.getConstructor(goalSpiderNearTarget, nmsEnt.getClass(), Class.class).newInstance(nmsEnt, entData.getType()));
} }
} else { } else {
boolean checkView = (checkSight == null ? true : checkSight.getSingle(e)); boolean checkView = (checkSight == null ? true : checkSight.getSingle(e));
Class<?> goalNearTarget = ReflectionUtils.getNMSClass("PathfinderGoalNearestAttackableTarget"); Class<?> goalNearTarget = ReflectionUtils.getNMSClass("PathfinderGoalNearestAttackableTarget");
for (EntityData<?> entData : types) { for (EntityData<?> entData : types) {
if (LivingEntity.class.isAssignableFrom(entData.getType())) if (LivingEntity.class.isAssignableFrom(entData.getType()))
newGoal = goalNearTarget.getConstructor(entCreature, Class.class, boolean.class).newInstance(nmsEnt, entData.getType(), checkView); newGoals.add(goalNearTarget.getConstructor(entCreature, Class.class, boolean.class).newInstance(nmsEnt, entData.getType(), checkView));
} }
} }
} else if (mark == 15) { } else if (mark == 15) {
Class<?> goalOcelotAttack = ReflectionUtils.getNMSClass("PathfinderGoalOcelotAttack"); Class<?> goalOcelotAttack = ReflectionUtils.getNMSClass("PathfinderGoalOcelotAttack");
newGoal = goalOcelotAttack.getConstructor(entInsent).newInstance(nmsEnt); newGoals.add(goalOcelotAttack.getConstructor(entInsent).newInstance(nmsEnt));
} else if (mark == 16) { } else if (mark == 16) {
Class<?> goalOpenDoors = ReflectionUtils.getNMSClass("PathfinderGoalOpenDoor"); Class<?> goalOpenDoors = ReflectionUtils.getNMSClass("PathfinderGoalOpenDoor");
newGoal = goalOpenDoors.getConstructor(entInsent, boolean.class).newInstance(nmsEnt, false); newGoals.add(goalOpenDoors.getConstructor(entInsent, boolean.class).newInstance(nmsEnt, false));
} else if (mark == 17) { } else if (mark == 17) {
double spd = (panicSpeed == null ? 1.25D : panicSpeed.getSingle(e).doubleValue()); double spd = (panicSpeed == null ? 1.25D : panicSpeed.getSingle(e).doubleValue());
if (ent instanceof Rabbit) { if (ent instanceof Rabbit) {
Class<?> goalRabbitPanic = ReflectionUtils.getNMSClass("EntityRabbit$PathfinderGoalRabbitPanic"); Class<?> goalRabbitPanic = ReflectionUtils.getNMSClass("EntityRabbit$PathfinderGoalRabbitPanic");
newGoal = goalRabbitPanic.getDeclaredConstructor(nmsEnt.getClass(), double.class).newInstance(nmsEnt, spd); newGoals.add(goalRabbitPanic.getDeclaredConstructor(nmsEnt.getClass(), double.class).newInstance(nmsEnt, spd));
} else { } else {
Class<?> goalPanic = ReflectionUtils.getNMSClass("PathfinderGoalPanic"); Class<?> goalPanic = ReflectionUtils.getNMSClass("PathfinderGoalPanic");
newGoal = goalPanic.getConstructor(entCreature, double.class).newInstance(nmsEnt, spd); newGoals.add(goalPanic.getConstructor(entCreature, double.class).newInstance(nmsEnt, spd));
} }
} else if (mark == 18) { } else if (mark == 18) {
Class<?> goalRandomLook = ReflectionUtils.getNMSClass("PathfinderGoalRandomLookaround"); Class<?> goalRandomLook = ReflectionUtils.getNMSClass("PathfinderGoalRandomLookaround");
newGoal = goalRandomLook.getConstructor(entInsent).newInstance(nmsEnt); newGoals.add(goalRandomLook.getConstructor(entInsent).newInstance(nmsEnt));
} else if (mark == 19) { } else if (mark == 19) {
double spd = (randomWalkSpeed == null ? 1.0D : randomWalkSpeed.getSingle(e).doubleValue()); double spd = (randomWalkSpeed == null ? 1.0D : randomWalkSpeed.getSingle(e).doubleValue());
int interval = (randomWalkInterval == null ? 120 : randomWalkInterval.getSingle(e).getTicks()); int interval = (randomWalkInterval == null ? 120 : randomWalkInterval.getSingle(e).getTicks());
Class<?> goalWander = ReflectionUtils.getNMSClass("PathfinderGoalRandomStroll"); Class<?> goalWander = ReflectionUtils.getNMSClass("PathfinderGoalRandomStroll");
newGoal = goalWander.getConstructor(entCreature, double.class, int.class).newInstance(nmsEnt, spd, interval); newGoals.add(goalWander.getConstructor(entCreature, double.class, int.class).newInstance(nmsEnt, spd, interval));
} else if (mark == 20) { } else if (mark == 20) {
if (!(ent instanceof Tameable)) if (!(ent instanceof Tameable))
return; return;
Class<?> goalSit = ReflectionUtils.getNMSClass("PathfinderGoalSit"); Class<?> goalSit = ReflectionUtils.getNMSClass("PathfinderGoalSit");
newGoal = goalSit.getConstructor(entTameable).newInstance(nmsEnt); newGoals.add(goalSit.getConstructor(entTameable).newInstance(nmsEnt));
} else if (mark == 21) { } else if (mark == 21) {
if (!(ent instanceof Creeper)) if (!(ent instanceof Creeper))
return; return;
Class<?> goalSwell = ReflectionUtils.getNMSClass("PathfinderGoalSwell"); Class<?> goalSwell = ReflectionUtils.getNMSClass("PathfinderGoalSwell");
newGoal = goalSwell.getConstructor(nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(goalSwell.getConstructor(nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 22) { } else if (mark == 22) {
if (!(ent instanceof Squid)) if (!(ent instanceof Squid))
return; return;
Class<?> goalSquid = ReflectionUtils.getNMSClass("EntitySquid$PathfinderGoalSquid"); Class<?> goalSquid = ReflectionUtils.getNMSClass("EntitySquid$PathfinderGoalSquid");
newGoal = ReflectionUtils.getConstructor(goalSquid, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalSquid, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 23) { } else if (mark == 23) {
if (ent instanceof Blaze) { if (ent instanceof Blaze) {
Class<?> goalBlazeFireball = ReflectionUtils.getNMSClass("EntityBlaze$PathfinderGoalBlazeFireball"); Class<?> goalBlazeFireball = ReflectionUtils.getNMSClass("EntityBlaze$PathfinderGoalBlazeFireball");
newGoal = ReflectionUtils.getConstructor(goalBlazeFireball, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalBlazeFireball, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (ent instanceof Ghast) { } else if (ent instanceof Ghast) {
Class<?> goalGhastFireball = ReflectionUtils.getNMSClass("EntityGhast$PathfinderGoalGhastAttackTarget"); Class<?> goalGhastFireball = ReflectionUtils.getNMSClass("EntityGhast$PathfinderGoalGhastAttackTarget");
newGoal = ReflectionUtils.getConstructor(goalGhastFireball, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalGhastFireball, nmsEnt.getClass()).newInstance(nmsEnt));
} }
} else if (mark == 24) { } else if (mark == 24) {
if (!(ent instanceof Silverfish)) if (!(ent instanceof Silverfish))
return; return;
Class<?> goalHideInBlock = ReflectionUtils.getNMSClass("EntitySilverfish$PathfinderGoalSilverfishHideInBlock"); Class<?> goalHideInBlock = ReflectionUtils.getNMSClass("EntitySilverfish$PathfinderGoalSilverfishHideInBlock");
newGoal = ReflectionUtils.getConstructor(goalHideInBlock, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalHideInBlock, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 25) { } else if (mark == 25) {
if (!(ent instanceof Silverfish)) if (!(ent instanceof Silverfish))
return; return;
Class<?> goalWakeSilverfish = ReflectionUtils.getNMSClass("EntitySilverfish$PathfinderGoalSilverfishWakeOthers"); Class<?> goalWakeSilverfish = ReflectionUtils.getNMSClass("EntitySilverfish$PathfinderGoalSilverfishWakeOthers");
newGoal = ReflectionUtils.getConstructor(goalWakeSilverfish, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalWakeSilverfish, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 26) { } else if (mark == 26) {
if (!(ent instanceof Enderman)) if (!(ent instanceof Enderman))
return; return;
Class<?> goalPickBlocks = ReflectionUtils.getNMSClass("EntityEnderman$PathfinderGoalEndermanPickupBlock"); Class<?> goalPickBlocks = ReflectionUtils.getNMSClass("EntityEnderman$PathfinderGoalEndermanPickupBlock");
newGoal = ReflectionUtils.getConstructor(goalPickBlocks, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalPickBlocks, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 27) { } else if (mark == 27) {
if (!(ent instanceof Enderman)) if (!(ent instanceof Enderman))
return; return;
Class<?> goalPlaceBlocks = ReflectionUtils.getNMSClass("EntityEnderman$PathfinderGoalEndermanPlaceBlock"); Class<?> goalPlaceBlocks = ReflectionUtils.getNMSClass("EntityEnderman$PathfinderGoalEndermanPlaceBlock");
newGoal = ReflectionUtils.getConstructor(goalPlaceBlocks, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalPlaceBlocks, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 28) { } else if (mark == 28) {
if (!(ent instanceof Enderman)) if (!(ent instanceof Enderman))
return; return;
target = true; target = true;
Class<?> goalAttackLooker = ReflectionUtils.getNMSClass("EntityEnderman$PathfinderGoalPlayerWhoLookedAtTarget"); Class<?> goalAttackLooker = ReflectionUtils.getNMSClass("EntityEnderman$PathfinderGoalPlayerWhoLookedAtTarget");
newGoal = ReflectionUtils.getConstructor(goalAttackLooker, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalAttackLooker, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 29) { } else if (mark == 29) {
if (!(ent instanceof Ghast)) if (!(ent instanceof Ghast))
return; return;
Class<?> goalGhastMoveTarget = ReflectionUtils.getNMSClass("EntityGhast$PathfinderGoalGhastMoveTowardsTarget"); Class<?> goalGhastMoveTarget = ReflectionUtils.getNMSClass("EntityGhast$PathfinderGoalGhastMoveTowardsTarget");
newGoal = ReflectionUtils.getConstructor(goalGhastMoveTarget, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalGhastMoveTarget, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 30) { } else if (mark == 30) {
if (!(ent instanceof Ghast)) if (!(ent instanceof Ghast))
return; return;
Class<?> goalGhastIdleMove = ReflectionUtils.getNMSClass("EntityGhast$PathfinderGoalGhastIdleMove"); Class<?> goalGhastIdleMove = ReflectionUtils.getNMSClass("EntityGhast$PathfinderGoalGhastIdleMove");
newGoal = ReflectionUtils.getConstructor(goalGhastIdleMove, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalGhastIdleMove, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 31) { } else if (mark == 31) {
ItemStack itemStack = temptItem.getSingle(e); ItemStack itemStack = temptItem.getSingle(e);
if (itemStack.getType() == Material.AIR || itemStack == null) if (itemStack.getType() == Material.AIR || itemStack == null)
@ -375,7 +375,7 @@ public class EffSetPathGoal extends Effect {
double spd = (temptSpeed == null ? 1.0D : temptSpeed.getSingle(e).doubleValue()); double spd = (temptSpeed == null ? 1.0D : temptSpeed.getSingle(e).doubleValue());
boolean scared = (temptScared == null ? false : temptScared.getSingle(e)); boolean scared = (temptScared == null ? false : temptScared.getSingle(e));
Class<?> goalTempt = ReflectionUtils.getNMSClass("PathfinderGoalTempt"); Class<?> goalTempt = ReflectionUtils.getNMSClass("PathfinderGoalTempt");
newGoal = goalTempt.getConstructor(entCreature, double.class, nmsItemClass, boolean.class).newInstance(nmsEnt, spd, nmsItem, scared); newGoals.add(goalTempt.getConstructor(entCreature, double.class, nmsItemClass, boolean.class).newInstance(nmsEnt, spd, nmsItem, scared));
} else if (mark == 32) { } else if (mark == 32) {
if (!(ent instanceof Tameable)) if (!(ent instanceof Tameable))
return; return;
@ -384,54 +384,56 @@ public class EffSetPathGoal extends Effect {
Class<?> goalTargetNonTamed = ReflectionUtils.getNMSClass("PathfinderGoalRandomTargetNonTamed"); Class<?> goalTargetNonTamed = ReflectionUtils.getNMSClass("PathfinderGoalRandomTargetNonTamed");
for (EntityData<?> entData : types) { for (EntityData<?> entData : types) {
if (LivingEntity.class.isAssignableFrom(entData.getType())) if (LivingEntity.class.isAssignableFrom(entData.getType()))
newGoal = goalTargetNonTamed.getConstructor(entTameable, Class.class, boolean.class, Predicate.class).newInstance(nmsEnt, entData.getType(), false, Predicates.alwaysTrue()); newGoals.add(goalTargetNonTamed.getConstructor(entTameable, Class.class, boolean.class, Predicate.class).newInstance(nmsEnt, entData.getType(), false, Predicates.alwaysTrue()));
} }
} else if (mark == 33) { } else if (mark == 33) {
if (!(ent instanceof Guardian)) if (!(ent instanceof Guardian))
return; return;
Class<?> goalGuardianAttack = ReflectionUtils.getNMSClass("EntityGuardian$PathfinderGoalGuardianAttack"); Class<?> goalGuardianAttack = ReflectionUtils.getNMSClass("EntityGuardian$PathfinderGoalGuardianAttack");
newGoal = ReflectionUtils.getConstructor(goalGuardianAttack, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalGuardianAttack, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 34) { } else if (mark == 34) {
if (!(ent instanceof PigZombie)) if (!(ent instanceof PigZombie))
return; return;
target = true; target = true;
Class<?> goalAnger = ReflectionUtils.getNMSClass("EntityPigZombie$PathfinderGoalAnger"); Class<?> goalAnger = ReflectionUtils.getNMSClass("EntityPigZombie$PathfinderGoalAnger");
newGoal = ReflectionUtils.getConstructor(goalAnger, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalAnger, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 35) { } else if (mark == 35) {
if (!(ent instanceof PigZombie)) if (!(ent instanceof PigZombie))
return; return;
target = true; target = true;
Class<?> goalAngerOther = ReflectionUtils.getNMSClass("EntityPigZombie$PathfinderGoalAngerOther"); Class<?> goalAngerOther = ReflectionUtils.getNMSClass("EntityPigZombie$PathfinderGoalAngerOther");
newGoal = ReflectionUtils.getConstructor(goalAngerOther, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalAngerOther, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 36) { } else if (mark == 36) {
if (!(ent instanceof Rabbit)) if (!(ent instanceof Rabbit))
return; return;
Class<?> goalEatCarrots = ReflectionUtils.getNMSClass("EntityRabbit$PathfinderGoalEatCarrots"); Class<?> goalEatCarrots = ReflectionUtils.getNMSClass("EntityRabbit$PathfinderGoalEatCarrots");
newGoal = ReflectionUtils.getConstructor(goalEatCarrots, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalEatCarrots, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 37) { } else if (mark == 37) {
if (!(ent instanceof Rabbit)) if (!(ent instanceof Rabbit))
return; return;
Class<?> goalRabbitAttack = ReflectionUtils.getNMSClass("EntityRabbit$PathfinderGoalKillerRabbitMeleeAttack"); Class<?> goalRabbitAttack = ReflectionUtils.getNMSClass("EntityRabbit$PathfinderGoalKillerRabbitMeleeAttack");
newGoal = ReflectionUtils.getConstructor(goalRabbitAttack, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalRabbitAttack, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 38) { } else if (mark == 38) {
if (!(ent instanceof Slime)) if (!(ent instanceof Slime))
return; return;
Class<?> goalJump = ReflectionUtils.getNMSClass("EntitySlime$PathfinderGoalSlimeRandomJump"); Class<?> goalJump = ReflectionUtils.getNMSClass("EntitySlime$PathfinderGoalSlimeRandomJump");
newGoal = ReflectionUtils.getConstructor(goalJump, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalJump, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 39) { } else if (mark == 39) {
if (!(ent instanceof Slime)) if (!(ent instanceof Slime))
return; return;
Class<?> goalRandomDir = ReflectionUtils.getNMSClass("EntitySlime$PathfinderGoalSlimeRandomDirection"); Class<?> goalRandomDir = ReflectionUtils.getNMSClass("EntitySlime$PathfinderGoalSlimeRandomDirection");
newGoal = ReflectionUtils.getConstructor(goalRandomDir, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalRandomDir, nmsEnt.getClass()).newInstance(nmsEnt));
} else if (mark == 40) { } else if (mark == 40) {
if (!(ent instanceof Slime)) if (!(ent instanceof Slime))
return; return;
Class<?> goalSlimeWander = ReflectionUtils.getNMSClass("EntitySlime$PathfinderGoalSlimeIdle"); Class<?> goalSlimeWander = ReflectionUtils.getNMSClass("EntitySlime$PathfinderGoalSlimeIdle");
newGoal = ReflectionUtils.getConstructor(goalSlimeWander, nmsEnt.getClass()).newInstance(nmsEnt); newGoals.add(ReflectionUtils.getConstructor(goalSlimeWander, nmsEnt.getClass()).newInstance(nmsEnt));
} }
if (newGoal == null) if (newGoals.size() == 0)
return; return;
SkStuff.getNMSMethods().addPathfinderGoal(nmsEnt, priority, newGoal, target); for (Object goal : newGoals) {
SkStuff.getNMSMethods().addPathfinderGoal(nmsEnt, priority, goal, target);
}
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException ex) { } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException ex) {
ex.printStackTrace(); ex.printStackTrace();
} }

View File

@ -51,9 +51,14 @@ public class ExprNBTListContents extends SimpleExpression<Object> {
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
Object list = nbtList.getSingle(e); Object list = nbtList.getSingle(e);
if (mode == ChangeMode.ADD) { if (mode == ChangeMode.ADD) {
if (!(delta[0] instanceof Number || delta[0] instanceof String || nbtBaseClass.isAssignableFrom(delta[0].getClass()))) if (nbtBaseClass.isAssignableFrom(delta[0].getClass()))
return; //NBT can only store numbers, strings, lists or compounds. SkStuff.getNMSMethods().addToList(list, delta[0]);
SkStuff.getNMSMethods().addToList(list, delta[0]); else if (delta[0] instanceof Number)
SkStuff.getNMSMethods().addToList(list, SkStuff.getNMSMethods().convertToNBT((Number) delta[0]));
else if (delta[0] instanceof String)
SkStuff.getNMSMethods().addToList(list, SkStuff.getNMSMethods().convertToNBT((String) delta[0]));
} else if (mode == ChangeMode.REMOVE || mode == ChangeMode.REMOVE_ALL) {
// TODO Code to remove a single or all objects of some value in an NBT array.
} }
} }