From f6a5881c8abe81101299f583c2b21405df79d57a Mon Sep 17 00:00:00 2001 From: Caleb Bassham Date: Fri, 28 Sep 2018 02:32:19 -0500 Subject: [PATCH] Call player spectator target events diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java index f43584f0e3..bc62a9f08e 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -61,7 +61,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { private EnumChatVisibility ch; private boolean ci = true; private long cj = SystemUtils.getMonotonicMillis(); - private Entity spectatedEntity; + private Entity spectatedEntity; private void setSpectatorTargetField(Entity e) { this.spectatedEntity = e; } // Paper - OBFHELPER public boolean worldChangeInvuln; private boolean cm; private void setHasSeenCredits(boolean has) { this.cm = has; } // Paper - OBFHELPER private final RecipeBookServer recipeBook; @@ -1586,15 +1586,35 @@ public class EntityPlayer extends EntityHuman implements ICrafting { return (Entity) (this.spectatedEntity == null ? this : this.spectatedEntity); } - public void setSpectatorTarget(Entity entity) { + public void setSpectatorTarget(Entity newSpectatorTarget) { + // Paper start - Add PlayerStartSpectatingEntityEvent and PlayerStopSpectatingEntity Event Entity entity1 = this.getSpecatorTarget(); - this.spectatedEntity = (Entity) (entity == null ? this : entity); - if (entity1 != this.spectatedEntity) { - this.playerConnection.sendPacket(new PacketPlayOutCamera(this.spectatedEntity)); - this.playerConnection.a(this.spectatedEntity.locX(), this.spectatedEntity.locY(), this.spectatedEntity.locZ(), this.yaw, this.pitch, TeleportCause.SPECTATE); // CraftBukkit + if (newSpectatorTarget == null) { + newSpectatorTarget = this; } + if (entity1 == newSpectatorTarget) return; // new spec target is the current spec target + + if (newSpectatorTarget == this) { + com.destroystokyo.paper.event.player.PlayerStopSpectatingEntityEvent playerStopSpectatingEntityEvent = new com.destroystokyo.paper.event.player.PlayerStopSpectatingEntityEvent(this.getBukkitEntity(), entity1.getBukkitEntity()); + + if (!playerStopSpectatingEntityEvent.callEvent()) { + return; + } + } else { + com.destroystokyo.paper.event.player.PlayerStartSpectatingEntityEvent playerStartSpectatingEntityEvent = new com.destroystokyo.paper.event.player.PlayerStartSpectatingEntityEvent(this.getBukkitEntity(), entity1.getBukkitEntity(), newSpectatorTarget.getBukkitEntity()); + + if (!playerStartSpectatingEntityEvent.callEvent()) { + return; + } + } + + setSpectatorTargetField(newSpectatorTarget); + + this.playerConnection.sendPacket(new PacketPlayOutCamera(newSpectatorTarget)); + this.playerConnection.a(this.spectatedEntity.locX(), this.spectatedEntity.locY(), this.spectatedEntity.locZ(), this.yaw, this.pitch, TeleportCause.SPECTATE); // CraftBukkit + // Paper end } @Override @@ -1602,7 +1622,6 @@ public class EntityPlayer extends EntityHuman implements ICrafting { if (this.portalCooldown > 0 && !this.worldChangeInvuln) { --this.portalCooldown; } - } @Override -- 2.26.2