mirror of
https://github.com/barkeser2002/CatServer.git
synced 2026-09-25 02:20:01 +03:00
85 lines
4.9 KiB
Diff
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);
|
|
}
|
|
}
|