summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/EntityEnderPearl.java
diff options
context:
space:
mode:
authorNathan Adams <dinnerbone@dinnerbone.com>2011-12-01 23:34:14 +0000
committerNathan Adams <dinnerbone@dinnerbone.com>2011-12-01 23:34:14 +0000
commit0c958c0dff372398a773c3ebc52f5178bce0f374 (patch)
treeddbb4f9f572eb66e38ac5e71dbfb4298142c2cfb /src/main/java/net/minecraft/server/EntityEnderPearl.java
parent6f79ca5c54d30d04803143975757713a01bf4e35 (diff)
downloadcraftbukkit-0c958c0dff372398a773c3ebc52f5178bce0f374.tar
craftbukkit-0c958c0dff372398a773c3ebc52f5178bce0f374.tar.gz
craftbukkit-0c958c0dff372398a773c3ebc52f5178bce0f374.tar.lz
craftbukkit-0c958c0dff372398a773c3ebc52f5178bce0f374.tar.xz
craftbukkit-0c958c0dff372398a773c3ebc52f5178bce0f374.zip
Fixed exploit with Ender Pearls, and made them perform a damage event. This fixes BUKKIT-38
Diffstat (limited to 'src/main/java/net/minecraft/server/EntityEnderPearl.java')
-rw-r--r--src/main/java/net/minecraft/server/EntityEnderPearl.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/EntityEnderPearl.java b/src/main/java/net/minecraft/server/EntityEnderPearl.java
new file mode 100644
index 00000000..02e0327e
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java
@@ -0,0 +1,52 @@
+package net.minecraft.server;
+
+import org.bukkit.Bukkit;
+import org.bukkit.craftbukkit.entity.CraftPlayer;
+import org.bukkit.event.entity.EntityDamageEvent;
+
+public class EntityEnderPearl extends EntityProjectile {
+ public EntityEnderPearl(World world) {
+ super(world);
+ }
+
+ public EntityEnderPearl(World world, EntityLiving entityliving) {
+ super(world, entityliving);
+ }
+
+ public EntityEnderPearl(World world, double d0, double d1, double d2) {
+ super(world, d0, d1, d2);
+ }
+
+ protected void a(MovingObjectPosition movingobjectposition) {
+ if (movingobjectposition.entity != null && movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.shooter), 0)) {
+ ;
+ }
+
+ for (int i = 0; i < 32; ++i) {
+ this.world.a("portal", this.locX, this.locY + this.random.nextDouble() * 2.0D, this.locZ, this.random.nextGaussian(), 0.0D, this.random.nextGaussian());
+ }
+
+ if (!this.world.isStatic) {
+ // CraftBukkit start - dupe fix + damage event
+ boolean damage = false;
+ if (this.shooter != null) {
+ if (this.shooter instanceof EntityPlayer) {
+ damage = ((CraftPlayer)this.shooter.bukkitEntity).isOnline();
+ } else {
+ damage = true;
+ }
+ }
+
+ if (damage) {
+ this.shooter.a_(this.locX, this.locY, this.locZ);
+ this.shooter.fallDistance = 0.0F;
+ EntityDamageEvent event = new EntityDamageEvent(getBukkitEntity(), EntityDamageEvent.DamageCause.FALL, 5);
+ Bukkit.getPluginManager().callEvent(event);
+ this.shooter.damageEntity(DamageSource.FALL, event.getDamage());
+ }
+ // CraftBukkit end
+
+ this.die();
+ }
+ }
+}