PaperMC/Spigot-Server-Patches/0327-Call-player-spectator-target-events.patch
Shane Freeder 89182676ed
Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
9e95da12 SPIGOT-5052: PlayerPortalEvent not called when nether is disabled
28ea3fd1 SPIGOT-5062: end_portal on an non-default end world crashes the server
4a07dc69 SPIGOT-5058: ClassCastException when getting InventoryHolder of lectern when it's destroyed
2019-06-12 09:45:30 +01:00

63 lines
3.2 KiB
Diff

From e1503198f2794f9505dc26bff6d1b66e1b8ccde5 Mon Sep 17 00:00:00 2001
From: Caleb Bassham <caleb.bassham@gmail.com>
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 5610f989ee..5553073f93 100644
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
@@ -60,7 +60,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
private EnumChatVisibility ck;
private boolean cl = true;
private long cm = SystemUtils.getMonotonicMillis();
- private Entity spectatedEntity;
+ private Entity spectatedEntity; private void setSpectatorTargetField(Entity e) { this.spectatedEntity = e; } // Paper - OBFHELPER
public boolean worldChangeInvuln;
private boolean cp; private void setHasSeenCredits(boolean has) { this.cp = has; } // Paper - OBFHELPER
private final RecipeBookServer recipeBook;
@@ -1566,15 +1566,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
--
2.21.0