Files
CatServer/patches/net/minecraft/entity/item/EntityEnderPearl.java.patch
2019-02-24 22:29:41 +08:00

85 lines
4.9 KiB
Diff

--- ../src-base/minecraft/net/minecraft/entity/item/EntityEnderPearl.java
+++ ../src-work/minecraft/net/minecraft/entity/item/EntityEnderPearl.java
@@ -18,6 +18,11 @@
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
+import org.bukkit.Bukkit;
+import org.bukkit.craftbukkit.entity.CraftPlayer;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.event.entity.CreatureSpawnEvent;
+import org.bukkit.event.player.PlayerTeleportEvent;
public class EntityEnderPearl extends EntityThrowable
{
@@ -98,22 +103,39 @@
if (entityplayermp.connection.getNetworkManager().isChannelOpen() && entityplayermp.world == this.world && !entityplayermp.isPlayerSleeping())
{
- if (this.rand.nextFloat() < 0.05F && this.world.getGameRules().getBoolean("doMobSpawning"))
- {
- EntityEndermite entityendermite = new EntityEndermite(this.world);
- entityendermite.setSpawnedByPlayer(true);
- entityendermite.setLocationAndAngles(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, entitylivingbase.rotationYaw, entitylivingbase.rotationPitch);
- this.world.spawnEntity(entityendermite);
- }
+ net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(entityplayermp, this.posX, this.posY, this.posZ, 5.0F);
+ if (!net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) { // Don't indent to lower patch size
+ // CraftBukkit start - Fire PlayerTeleportEvent
+ org.bukkit.craftbukkit.entity.CraftPlayer player = (CraftPlayer) entityplayermp.getBukkitEntity();
+ org.bukkit.Location location = getBukkitEntity().getLocation();
+ location.setPitch(player.getLocation().getPitch());
+ location.setYaw(player.getLocation().getYaw());
- if (entitylivingbase.isRiding())
- {
- entitylivingbase.dismountRidingEntity();
- }
+ PlayerTeleportEvent teleEvent = new PlayerTeleportEvent(player, player.getLocation(), location, PlayerTeleportEvent.TeleportCause.ENDER_PEARL);
+ Bukkit.getPluginManager().callEvent(teleEvent);
- entitylivingbase.setPositionAndUpdate(this.posX, this.posY, this.posZ);
- entitylivingbase.fallDistance = 0.0F;
- entitylivingbase.attackEntityFrom(DamageSource.FALL, 5.0F);
+ if (!teleEvent.isCancelled() && !entityplayermp.connection.isDisconnected()) {
+ if (this.rand.nextFloat() < 0.05F && this.world.getGameRules().getBoolean("doMobSpawning")) {
+ EntityEndermite entityendermite = new EntityEndermite(this.world);
+ entityendermite.setSpawnedByPlayer(true);
+ entityendermite.setLocationAndAngles(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, entitylivingbase.rotationYaw, entitylivingbase.rotationPitch);
+ this.world.addEntity(entityendermite, CreatureSpawnEvent.SpawnReason.ENDER_PEARL);
+ }
+
+ if (entitylivingbase.isRiding()) {
+ entitylivingbase.dismountRidingEntity();
+ }
+
+ entityplayermp.connection.teleport(teleEvent.getTo());
+ entitylivingbase.fallDistance = 0.0F;
+ CraftEventFactory.entityDamage = this;
+ entitylivingbase.attackEntityFrom(DamageSource.FALL, 5.0F);
+ CraftEventFactory.entityDamage = null;
+ }
+// entitylivingbase.setPositionAndUpdate(event.getTargetX(), event.getTargetY(), event.getTargetZ());
+// entitylivingbase.fallDistance = 0.0F;
+// entitylivingbase.attackEntityFrom(DamageSource.FALL, event.getAttackDamage());
+ }
}
}
else if (entitylivingbase != null)
@@ -141,13 +163,13 @@
}
@Nullable
- public Entity changeDimension(int dimensionIn)
+ public Entity changeDimension(int dimensionIn, net.minecraftforge.common.util.ITeleporter teleporter)
{
if (this.thrower.dimension != dimensionIn)
{
this.thrower = null;
}
- return super.changeDimension(dimensionIn);
+ return super.changeDimension(dimensionIn, teleporter);
}
}