Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}