mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-23 15:00:30 +01:00
dd11ef8441
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 3a3bea52 SPIGOT-7829: Increase maximum outgoing plugin message size to match Vanilla intention 5cd1c8cb SPIGOT-7831: Add CreatureSpawnEvent.SpawnReason#POTION_EFFECT a8e278f0 SPIGOT-7827: Sync EntityPortalEvent with PlayerPortalEvent since non-players can now create portals 53729d12 Remove spurious ApiStatus.Internal annotation b9f57486 SPIGOT-7799, PR-1039: Expose explosion world interaction in EntityExplodeEvent and BlockExplodeEvent 7983b966 PR-1029: Trial changing a small number of inner enums to classes/interfaces to better support custom values CraftBukkit Changes: 403accd56 SPIGOT-7831: Add CreatureSpawnEvent.SpawnReason#POTION_EFFECT 812761660 Increase outdated build delay bed1e3ff6 SPIGOT-7827: Sync EntityPortalEvent with PlayerPortalEvent since non-players can now create portals 2444c8b23 SPIGOT-7823: Suspicious sand and gravel material are not marked as having gravity correctly aceddcd0b SPIGOT-7820: Enum changes - duplicate method name a0d2d6a84 SPIGOT-7813: Material#isInteractable() always returns false 8fd64b091 SPIGOT-7806: Handle both loot and inventory item drop behaviour in PlayerDeathEvent a4ee40b74 SPIGOT-7799, PR-1436: Expose explosion world interaction in EntityExplodeEvent and BlockExplodeEvent 082aa51c5 PR-1424: Trial changing a small number of inner enums to classes/interfaces to better support custom values 66e78a96b SPIGOT-7815: Consider EntityDamageEvent status for Wolf armor damage Spigot Changes: 5bbef5ad SPIGOT-7834: Modify max value for generic.max_absorption
225 lines
8.3 KiB
Diff
225 lines
8.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Thu, 15 Dec 2022 10:33:34 -0800
|
|
Subject: [PATCH] Improve PortalEvents
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/PortalType.java b/src/main/java/org/bukkit/PortalType.java
|
|
index 427cfbb8b542215c5d9993056e0cadf18ab9bd4b..e6120b83259c15189bbbf6b6dd13fbe7ccdf073d 100644
|
|
--- a/src/main/java/org/bukkit/PortalType.java
|
|
+++ b/src/main/java/org/bukkit/PortalType.java
|
|
@@ -14,6 +14,12 @@ public enum PortalType {
|
|
* This is an Ender portal.
|
|
*/
|
|
ENDER,
|
|
+ // Paper start
|
|
+ /**
|
|
+ * This is an end gateway
|
|
+ */
|
|
+ END_GATEWAY,
|
|
+ // Paper end
|
|
|
|
/**
|
|
* This is a custom Plugin portal.
|
|
diff --git a/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java b/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java
|
|
index 6818e9f0ba32ca1a1e612703f7526b29f5a6438f..d3724db0a5a67cde15b05fecd32b2ca370cca998 100644
|
|
--- a/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java
|
|
+++ b/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java
|
|
@@ -7,14 +7,25 @@ import org.jetbrains.annotations.NotNull;
|
|
|
|
/**
|
|
* Called when an entity comes into contact with a portal
|
|
+ * <p>
|
|
+ * Cancelling this event prevents any further processing of the portal for that tick.
|
|
+ * @see io.papermc.paper.event.entity.EntityInsideBlockEvent
|
|
*/
|
|
-public class EntityPortalEnterEvent extends EntityEvent {
|
|
+public class EntityPortalEnterEvent extends EntityEvent implements org.bukkit.event.Cancellable { // Paper
|
|
private static final HandlerList handlers = new HandlerList();
|
|
private final Location location;
|
|
|
|
+ @Deprecated(since = "1.21") @io.papermc.paper.annotation.DoNotUse // Paper
|
|
public EntityPortalEnterEvent(@NotNull final Entity entity, @NotNull final Location location) {
|
|
+ // Paper start
|
|
+ this(entity, location, org.bukkit.PortalType.CUSTOM);
|
|
+ }
|
|
+ @org.jetbrains.annotations.ApiStatus.Internal
|
|
+ public EntityPortalEnterEvent(@NotNull final Entity entity, @NotNull final Location location, @NotNull final org.bukkit.PortalType portalType) {
|
|
+ // Paper end
|
|
super(entity);
|
|
this.location = location;
|
|
+ this.portalType = portalType; // Paper
|
|
}
|
|
|
|
/**
|
|
@@ -27,6 +38,30 @@ public class EntityPortalEnterEvent extends EntityEvent {
|
|
return location;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ private boolean cancelled = false;
|
|
+ private final org.bukkit.PortalType portalType;
|
|
+
|
|
+ /**
|
|
+ * Get the portal type.
|
|
+ *
|
|
+ * @return the portal type
|
|
+ */
|
|
+ public org.bukkit.@NotNull PortalType getPortalType() {
|
|
+ return this.portalType;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean isCancelled() {
|
|
+ return this.cancelled;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setCancelled(final boolean cancel) {
|
|
+ this.cancelled = cancel;
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@NotNull
|
|
@Override
|
|
public HandlerList getHandlers() {
|
|
diff --git a/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java b/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java
|
|
index d70400236b08217ba675e560877f951ea4f143ca..4544e7e155619a6ae31cbb2999ae3dedfd3b5f4b 100644
|
|
--- a/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java
|
|
+++ b/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java
|
|
@@ -3,6 +3,7 @@ package org.bukkit.event.entity;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.event.HandlerList;
|
|
+import org.jetbrains.annotations.ApiStatus;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
@@ -17,23 +18,68 @@ public class EntityPortalEvent extends EntityTeleportEvent {
|
|
private int searchRadius = 128;
|
|
private boolean canCreatePortal = true;
|
|
private int creationRadius = 16;
|
|
+ private final org.bukkit.PortalType type; // Paper
|
|
|
|
public EntityPortalEvent(@NotNull final Entity entity, @NotNull final Location from, @Nullable final Location to) {
|
|
- super(entity, from, to);
|
|
+ this(entity, from, to, 128); // Paper
|
|
}
|
|
|
|
public EntityPortalEvent(@NotNull Entity entity, @NotNull Location from, @Nullable Location to, int searchRadius) {
|
|
super(entity, from, to);
|
|
this.searchRadius = searchRadius;
|
|
+ this.type = org.bukkit.PortalType.CUSTOM; // Paper
|
|
}
|
|
|
|
public EntityPortalEvent(@NotNull Entity entity, @NotNull Location from, @Nullable Location to, int searchRadius, boolean canCreatePortal, int creationRadius) {
|
|
+ // Paper start
|
|
+ this(entity, from, to, searchRadius, canCreatePortal, creationRadius, org.bukkit.PortalType.CUSTOM);
|
|
+ }
|
|
+
|
|
+ @ApiStatus.Internal
|
|
+ public EntityPortalEvent(@NotNull Entity entity, @NotNull Location from, @Nullable Location to, int searchRadius, boolean canCreatePortal, int creationRadius, final @NotNull org.bukkit.PortalType portalType) {
|
|
super(entity, from, to);
|
|
+ this.type = portalType;
|
|
+ // Paper end
|
|
this.searchRadius = searchRadius;
|
|
this.canCreatePortal = canCreatePortal;
|
|
this.creationRadius = creationRadius;
|
|
}
|
|
|
|
+ // Paper start
|
|
+ /**
|
|
+ * Get the portal type relating to this event.
|
|
+ *
|
|
+ * @return the portal type
|
|
+ */
|
|
+ public @NotNull org.bukkit.PortalType getPortalType() {
|
|
+ return this.type;
|
|
+ }
|
|
+ /**
|
|
+ * For {@link org.bukkit.PortalType#NETHER}, this is initially just the starting point
|
|
+ * for the search for a portal to teleport to. It will initially just be the {@link #getFrom()}
|
|
+ * scaled for dimension scaling and clamped to be inside the world border.
|
|
+ * <p>
|
|
+ * For {@link org.bukkit.PortalType#ENDER}, this will initially be the exact destination
|
|
+ * either, the world spawn for <i>end->any world</i> or end spawn for <i>any world->end</i>.
|
|
+ *
|
|
+ * @return starting point for search or exact destination
|
|
+ */
|
|
+ @Override
|
|
+ public @Nullable Location getTo() {
|
|
+ return super.getTo();
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * See the description of {@link #getTo()}.
|
|
+ * @param to starting point for search or exact destination
|
|
+ * or null to cancel
|
|
+ */
|
|
+ @Override
|
|
+ public void setTo(@Nullable final Location to) {
|
|
+ super.setTo(to);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
/**
|
|
* Set the Block radius to search in for available portals.
|
|
*
|
|
diff --git a/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java b/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java
|
|
index 57eeeafae84f83a939925820e827769749ff27ec..929a997671de8202efb9da97fbf9b4a0bf7c37e8 100644
|
|
--- a/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java
|
|
+++ b/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java
|
|
@@ -32,6 +32,53 @@ public class PlayerPortalEvent extends PlayerTeleportEvent {
|
|
this.canCreatePortal = canCreatePortal;
|
|
this.creationRadius = creationRadius;
|
|
}
|
|
+ // Paper start
|
|
+ /**
|
|
+ * For {@link TeleportCause#NETHER_PORTAL}, this is initially just the starting point
|
|
+ * for the search for a portal to teleport to. It will initially just be the {@link #getFrom()}
|
|
+ * scaled for dimension scaling and clamped to be inside the world border.
|
|
+ * <p>
|
|
+ * For {@link TeleportCause#END_PORTAL}, this will initially be the exact destination
|
|
+ * either, the world spawn for <i>end->any world</i> or end spawn for <i>any world->end</i>.
|
|
+ *
|
|
+ * @return starting point for search or exact destination
|
|
+ */
|
|
+ @Override
|
|
+ public @NotNull Location getTo() {
|
|
+ return super.getTo();
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * See the description of {@link #getTo()}.
|
|
+ * @param to starting point for search or exact destination
|
|
+ */
|
|
+ @Override
|
|
+ public void setTo(@NotNull final Location to) {
|
|
+ super.setTo(to);
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * No effect
|
|
+ * @return no effect
|
|
+ * @deprecated No effect
|
|
+ */
|
|
+ @Deprecated
|
|
+ @Override
|
|
+ public boolean willDismountPlayer() {
|
|
+ return super.willDismountPlayer();
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * No effect
|
|
+ * @return no effect
|
|
+ * @deprecated No effect
|
|
+ */
|
|
+ @Deprecated
|
|
+ @Override
|
|
+ public @NotNull java.util.Set<io.papermc.paper.entity.TeleportFlag.@NotNull Relative> getRelativeTeleportationFlags() {
|
|
+ return super.getRelativeTeleportationFlags();
|
|
+ }
|
|
+ // Paper end
|
|
|
|
/**
|
|
* Set the Block radius to search in for available portals.
|