Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 203 lines 5.6 kB view raw
1package org.bukkit.craftbukkit.entity; 2 3import net.minecraft.server.Entity; 4import net.minecraft.server.*; 5import org.bukkit.Location; 6import org.bukkit.block.Block; 7import org.bukkit.craftbukkit.CraftServer; 8import org.bukkit.craftbukkit.CraftWorld; 9import org.bukkit.entity.*; 10import org.bukkit.util.BlockIterator; 11 12import java.util.ArrayList; 13import java.util.HashSet; 14import java.util.Iterator; 15import java.util.List; 16 17public class CraftLivingEntity extends CraftEntity implements LivingEntity { 18 public CraftLivingEntity(final CraftServer server, final EntityLiving entity) { 19 super(server, entity); 20 } 21 22 public int getHealth() { 23 return getHandle().health; 24 } 25 26 public void setHealth(int health) { 27 if ((health < 0) || (health > 200)) { 28 throw new IllegalArgumentException("Health must be between 0 and 200"); 29 } 30 31 if (entity instanceof EntityPlayer && health == 0) { 32 ((EntityPlayer) entity).die((Entity) null); 33 } 34 35 getHandle().health = health; 36 } 37 38 @Override 39 public EntityLiving getHandle() { 40 return (EntityLiving) entity; 41 } 42 43 public void setHandle(final EntityLiving entity) { 44 super.setHandle((Entity) entity); 45 this.entity = entity; 46 } 47 48 @Override 49 public String toString() { 50 return "CraftLivingEntity{" + "id=" + getEntityId() + '}'; 51 } 52 53 public Egg throwEgg() { 54 net.minecraft.server.World world = ((CraftWorld) getWorld()).getHandle(); 55 EntityEgg egg = new EntityEgg(world, getHandle()); 56 57 world.addEntity(egg); 58 return (Egg) egg.getBukkitEntity(); 59 } 60 61 public Snowball throwSnowball() { 62 net.minecraft.server.World world = ((CraftWorld) getWorld()).getHandle(); 63 EntitySnowball snowball = new EntitySnowball(world, getHandle()); 64 65 world.addEntity(snowball); 66 return (Snowball) snowball.getBukkitEntity(); 67 } 68 69 public double getEyeHeight() { 70 return 1.0D; 71 } 72 73 public double getEyeHeight(boolean ignoreSneaking) { 74 return getEyeHeight(); 75 } 76 77 private List<Block> getLineOfSight(HashSet<Byte> transparent, int maxDistance, int maxLength) { 78 if (maxDistance > 120) { 79 maxDistance = 120; 80 } 81 ArrayList<Block> blocks = new ArrayList<Block>(); 82 Iterator<Block> itr = new BlockIterator(this, maxDistance); 83 while (itr.hasNext()) { 84 Block block = itr.next(); 85 blocks.add(block); 86 if (maxLength != 0 && blocks.size() > maxLength) { 87 blocks.remove(0); 88 } 89 int id = block.getTypeId(); 90 if (transparent == null) { 91 if (id != 0) { 92 break; 93 } 94 } else { 95 if (!transparent.contains((byte) id)) { 96 break; 97 } 98 } 99 } 100 return blocks; 101 } 102 103 public List<Block> getLineOfSight(HashSet<Byte> transparent, int maxDistance) { 104 return getLineOfSight(transparent, maxDistance, 0); 105 } 106 107 public Block getTargetBlock(HashSet<Byte> transparent, int maxDistance) { 108 List<Block> blocks = getLineOfSight(transparent, maxDistance, 1); 109 return blocks.get(0); 110 } 111 112 public List<Block> getLastTwoTargetBlocks(HashSet<Byte> transparent, int maxDistance) { 113 return getLineOfSight(transparent, maxDistance, 2); 114 } 115 116 public Arrow shootArrow() { 117 net.minecraft.server.World world = ((CraftWorld) getWorld()).getHandle(); 118 EntityArrow arrow = new EntityArrow(world, getHandle()); 119 120 world.addEntity(arrow); 121 return (Arrow) arrow.getBukkitEntity(); 122 } 123 124 public boolean isInsideVehicle() { 125 return getHandle().vehicle != null; 126 } 127 128 public boolean leaveVehicle() { 129 if (getHandle().vehicle == null) { 130 return false; 131 } 132 133 getHandle().setPassengerOf(null); 134 return true; 135 } 136 137 public Vehicle getVehicle() { 138 if (getHandle().vehicle == null) { 139 return null; 140 } 141 142 org.bukkit.entity.Entity vehicle = (getHandle().vehicle.getBukkitEntity()); 143 if (vehicle instanceof Vehicle) { 144 return (Vehicle) vehicle; 145 } 146 147 return null; 148 } 149 150 public int getRemainingAir() { 151 return getHandle().airTicks; 152 } 153 154 public void setRemainingAir(int ticks) { 155 getHandle().airTicks = ticks; 156 } 157 158 public int getMaximumAir() { 159 return getHandle().maxAirTicks; 160 } 161 162 public void setMaximumAir(int ticks) { 163 getHandle().maxAirTicks = ticks; 164 } 165 166 public void damage(int amount) { 167 entity.damageEntity((Entity) null, amount); 168 } 169 170 public void damage(int amount, org.bukkit.entity.Entity source) { 171 entity.damageEntity(((CraftEntity) source).getHandle(), amount); 172 } 173 174 public Location getEyeLocation() { 175 Location loc = getLocation(); 176 loc.setY(loc.getY() + getEyeHeight()); 177 return loc; 178 } 179 180 public int getMaximumNoDamageTicks() { 181 return getHandle().maxNoDamageTicks; 182 } 183 184 public void setMaximumNoDamageTicks(int ticks) { 185 getHandle().maxNoDamageTicks = ticks; 186 } 187 188 public int getLastDamage() { 189 return getHandle().lastDamage; 190 } 191 192 public void setLastDamage(int damage) { 193 getHandle().lastDamage = damage; 194 } 195 196 public int getNoDamageTicks() { 197 return getHandle().noDamageTicks; 198 } 199 200 public void setNoDamageTicks(int ticks) { 201 getHandle().noDamageTicks = ticks; 202 } 203}