BloodMoon/src/uk/co/jacekk/bukkit/bloodmoon/entities/BloodMoonEntitySkeleton.java

67 lines
1.9 KiB
Java
Executable File

package uk.co.jacekk.bukkit.bloodmoon.entities;
import java.lang.reflect.Field;
import java.util.ArrayList;
import org.bukkit.Location;
import org.bukkit.entity.Skeleton;
import uk.co.jacekk.bukkit.bloodmoon.BloodMoon;
import uk.co.jacekk.bukkit.bloodmoon.events.SkeletonMoveEvent;
import uk.co.jacekk.bukkit.bloodmoon.pathfinders.BloodMoonPathfinderGoalArrowAttack;
import net.minecraft.server.PathfinderGoal;
import net.minecraft.server.PathfinderGoalArrowAttack;
import net.minecraft.server.World;
public class BloodMoonEntitySkeleton extends net.minecraft.server.EntitySkeleton {
public boolean bloodMoonState;
public BloodMoonEntitySkeleton(World world){
super(world);
this.bloodMoonState = BloodMoon.bloodMoonWorlds.contains(world.worldData.name);
try{
Field a = this.goalSelector.getClass().getDeclaredField("a");
a.setAccessible(true);
@SuppressWarnings("unchecked")
ArrayList<PathfinderGoal> goals = (ArrayList<PathfinderGoal>) a.get(this.goalSelector);
for (Object item : goals){
Field goal = item.getClass().getDeclaredField("a");
goal.setAccessible(true);
if (goal.get(item) instanceof PathfinderGoalArrowAttack){
goal.set(item, new BloodMoonPathfinderGoalArrowAttack(this, this.bb, 1, 60));
}
}
a.set(this.goalSelector, goals);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void d_(){
Skeleton skeleton = (Skeleton) this.getBukkitEntity();
Location from = new Location(skeleton.getWorld(), this.lastX, this.lastY, this.lastZ, this.lastYaw, this.lastPitch);
Location to = new Location(skeleton.getWorld(), this.locX, this.locY, this.locZ, this.yaw, this.pitch);
SkeletonMoveEvent event = new SkeletonMoveEvent(skeleton, from, to);
this.world.getServer().getPluginManager().callEvent(event);
if (event.isCancelled() && skeleton.isDead() == false){
return;
}
super.d_();
}
}