diff options
Diffstat (limited to 'patch-remap/og/net/minecraft/world/entity/projectile/EntityEnderPearl.patch')
-rw-r--r-- | patch-remap/og/net/minecraft/world/entity/projectile/EntityEnderPearl.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/patch-remap/og/net/minecraft/world/entity/projectile/EntityEnderPearl.patch b/patch-remap/og/net/minecraft/world/entity/projectile/EntityEnderPearl.patch new file mode 100644 index 0000000000..cd97343db7 --- /dev/null +++ b/patch-remap/og/net/minecraft/world/entity/projectile/EntityEnderPearl.patch @@ -0,0 +1,75 @@ +--- a/net/minecraft/world/entity/projectile/EntityEnderPearl.java ++++ b/net/minecraft/world/entity/projectile/EntityEnderPearl.java +@@ -18,6 +18,13 @@ + import net.minecraft.world.phys.MovingObjectPosition; + import net.minecraft.world.phys.MovingObjectPositionEntity; + ++// CraftBukkit start ++import org.bukkit.Bukkit; ++import org.bukkit.craftbukkit.event.CraftEventFactory; ++import org.bukkit.event.entity.CreatureSpawnEvent; ++import org.bukkit.event.player.PlayerTeleportEvent; ++// CraftBukkit end ++ + public class EntityEnderPearl extends EntityProjectileThrowable { + + public EntityEnderPearl(EntityTypes<? extends EntityEnderPearl> entitytypes, World world) { +@@ -54,23 +61,36 @@ + EntityPlayer entityplayer = (EntityPlayer) entity; + + if (entityplayer.connection.isAcceptingMessages() && entityplayer.level() == this.level() && !entityplayer.isSleeping()) { +- if (this.random.nextFloat() < 0.05F && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { +- EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.create(this.level()); ++ // CraftBukkit start - Fire PlayerTeleportEvent ++ org.bukkit.craftbukkit.entity.CraftPlayer player = entityplayer.getBukkitEntity(); ++ org.bukkit.Location location = getBukkitEntity().getLocation(); ++ location.setPitch(player.getLocation().getPitch()); ++ location.setYaw(player.getLocation().getYaw()); + +- if (entityendermite != null) { +- entityendermite.moveTo(entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot()); +- this.level().addFreshEntity(entityendermite); ++ PlayerTeleportEvent teleEvent = new PlayerTeleportEvent(player, player.getLocation(), location, PlayerTeleportEvent.TeleportCause.ENDER_PEARL); ++ Bukkit.getPluginManager().callEvent(teleEvent); ++ ++ if (!teleEvent.isCancelled() && entityplayer.connection.isAcceptingMessages()) { ++ if (this.random.nextFloat() < 0.05F && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { ++ EntityEndermite entityendermite = (EntityEndermite) EntityTypes.ENDERMITE.create(this.level()); ++ ++ if (entityendermite != null) { ++ entityendermite.moveTo(entity.getX(), entity.getY(), entity.getZ(), entity.getYRot(), entity.getXRot()); ++ this.level().addFreshEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL); ++ } + } +- } + +- if (entity.isPassenger()) { +- entityplayer.dismountTo(this.getX(), this.getY(), this.getZ()); +- } else { +- entity.teleportTo(this.getX(), this.getY(), this.getZ()); +- } ++ if (entity.isPassenger()) { ++ entity.stopRiding(); ++ } + +- entity.resetFallDistance(); +- entity.hurt(this.damageSources().fall(), 5.0F); ++ entityplayer.connection.teleport(teleEvent.getTo()); ++ entity.resetFallDistance(); ++ CraftEventFactory.entityDamage = this; ++ entity.hurt(this.damageSources().fall(), 5.0F); ++ CraftEventFactory.entityDamage = null; ++ } ++ // CraftBukkit end + this.level().playSound((EntityHuman) null, this.getX(), this.getY(), this.getZ(), SoundEffects.PLAYER_TELEPORT, SoundCategory.PLAYERS); + } + } else if (entity != null) { +@@ -100,7 +120,7 @@ + public Entity changeDimension(WorldServer worldserver) { + Entity entity = this.getOwner(); + +- if (entity != null && entity.level().dimension() != worldserver.dimension()) { ++ if (entity != null && worldserver != null && entity.level().dimension() != worldserver.dimension()) { // CraftBukkit - SPIGOT-6113 + this.setOwner((Entity) null); + } + |