diff --git a/patches/api/0027-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch b/patches/api/0027-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch new file mode 100644 index 000000000..5c98adf93 --- /dev/null +++ b/patches/api/0027-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch @@ -0,0 +1,47 @@ +From ab115fed95481c6c247f4b64f57d9165af7ded7c Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Sat, 19 Oct 2019 03:53:46 -0500 +Subject: [PATCH] Add back EntityCreatePortalEvent for EnderDragon + +--- + src/main/java/org/bukkit/PortalType.java | 7 +++++++ + .../org/bukkit/event/entity/EntityCreatePortalEvent.java | 4 +--- + 2 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/src/main/java/org/bukkit/PortalType.java b/src/main/java/org/bukkit/PortalType.java +index 427cfbb8b..e23565323 100644 +--- a/src/main/java/org/bukkit/PortalType.java ++++ b/src/main/java/org/bukkit/PortalType.java +@@ -15,6 +15,13 @@ public enum PortalType { + */ + ENDER, + ++ // Purpur start ++ /** ++ * This is an End Gateway portal ++ */ ++ END_GATEWAY, ++ // Purpur end ++ + /** + * This is a custom Plugin portal. + */ +diff --git a/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java b/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java +index 397baaefd..7456240b4 100644 +--- a/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java ++++ b/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java +@@ -11,10 +11,8 @@ import org.jetbrains.annotations.NotNull; + + /** + * Thrown when a Living Entity creates a portal in a world. +- * +- * @deprecated Use {@link PortalCreateEvent} + */ +-@Deprecated ++// Purpur - un-deprecate + public class EntityCreatePortalEvent extends EntityEvent implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + private final List blocks; +-- +2.23.0.rc1 + diff --git a/patches/server/0083-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch b/patches/server/0083-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch new file mode 100644 index 000000000..53bc939ae --- /dev/null +++ b/patches/server/0083-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch @@ -0,0 +1,105 @@ +From cd0896d88b091d73b49281f65160d443dd40cc2b Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Sat, 19 Oct 2019 03:53:54 -0500 +Subject: [PATCH] Add back EntityCreatePortalEvent for EnderDragon + +--- + .../minecraft/server/EnderDragonBattle.java | 57 ++++++++++++++++--- + 1 file changed, 49 insertions(+), 8 deletions(-) + +diff --git a/src/main/java/net/minecraft/server/EnderDragonBattle.java b/src/main/java/net/minecraft/server/EnderDragonBattle.java +index c7470d2852..97bb59369f 100644 +--- a/src/main/java/net/minecraft/server/EnderDragonBattle.java ++++ b/src/main/java/net/minecraft/server/EnderDragonBattle.java +@@ -21,8 +21,8 @@ public class EnderDragonBattle { + private static final Logger LOGGER = LogManager.getLogger(); + private static final Predicate b = IEntitySelector.a.and(IEntitySelector.a(0.0D, 128.0D, 0.0D, 192.0D)); + public final BossBattleServer bossBattle; +- private final WorldServer d; +- private final List e; ++ private final WorldServer d; public WorldServer getWorld() { return d; } // Purpur - OBFHELPER ++ private final List e; public List getGateways() { return e; } // Purpur - OBFHELPER + private final ShapeDetector f; + private int g; + private int h; +@@ -354,8 +354,8 @@ public class EnderDragonBattle { + if (entityenderdragon.getUniqueID().equals(this.m)) { + this.bossBattle.setProgress(0.0F); + this.bossBattle.setVisible(false); +- this.a(true); +- this.n(); ++ spawnExitPortal(entityenderdragon); // Purpur ++ spawnGateway(entityenderdragon); // Purpur + if (net.pl3x.purpur.PurpurConfig.enderDragonAlwaysDropsEggBlock || !this.l) { // Purpur - always place dragon egg + this.d.setTypeUpdate(this.d.getHighestBlockYAt(HeightMap.Type.MOTION_BLOCKING, WorldGenEndTrophy.a), Blocks.DRAGON_EGG.getBlockData()); + } +@@ -366,21 +366,62 @@ public class EnderDragonBattle { + + } + +- private void n() { +- if (!this.e.isEmpty()) { +- int i = (Integer) this.e.remove(this.e.size() - 1); ++ // Purpur start ++ private void spawnGateway(EntityEnderDragon dragon) { n(dragon); } // Purpur - OBFHELPER ++ private void n(EntityEnderDragon entityenderdragon) { ++ if (!getGateways().isEmpty()) { ++ int i = getGateways().remove(getGateways().size() - 1); ++ // Purpur end + int j = MathHelper.floor(96.0D * Math.cos(2.0D * (-3.141592653589793D + 0.15707963267948966D * (double) i))); + int k = MathHelper.floor(96.0D * Math.sin(2.0D * (-3.141592653589793D + 0.15707963267948966D * (double) i))); + +- this.a(new BlockPosition(j, 75, k)); ++ // Purpur start ++ getWorld().captureBlockStates = true; ++ generateGateway(new BlockPosition(j, 75, k)); ++ getWorld().captureBlockStates = false; ++ if (getWorld().capturedBlockStates.size() > 0) { ++ org.bukkit.event.entity.EntityCreatePortalEvent event = new org.bukkit.event.entity.EntityCreatePortalEvent(entityenderdragon.getBukkitLivingEntity(), getWorld().capturedBlockStates.stream().map(state -> org.bukkit.craftbukkit.block.CraftBlockState.getBlockState(getWorld(), state.getPosition())).collect(java.util.stream.Collectors.toList()), org.bukkit.PortalType.END_GATEWAY); ++ if (!event.callEvent()) { ++ // put the gateway back into queue ++ getGateways().add(i); ++ // revert captured blocks ++ for (org.bukkit.craftbukkit.block.CraftBlockState state : getWorld().capturedBlockStates) { ++ state.update(true, false); ++ } ++ } ++ } ++ getWorld().capturedTileEntities.clear(); ++ getWorld().capturedBlockStates.clear(); ++ // Purpur end + } + } + ++ private void generateGateway(BlockPosition blockPosition) { a(blockPosition); } // Purpur - OBFHELPER + private void a(BlockPosition blockposition) { + this.d.triggerEffect(3000, blockposition, 0); + WorldGenerator.END_GATEWAY.generate(this.d, this.d.getChunkProvider().getChunkGenerator(), new Random(), blockposition, WorldGenEndGatewayConfiguration.a()); + } + ++ // Purpur start ++ private void spawnExitPortal(EntityEnderDragon dragon) { ++ getWorld().captureBlockStates = true; ++ generateExitPortal(true); ++ getWorld().captureBlockStates = false; ++ if (getWorld().capturedBlockStates.size() > 0) { ++ org.bukkit.event.entity.EntityCreatePortalEvent event = new org.bukkit.event.entity.EntityCreatePortalEvent(dragon.getBukkitLivingEntity(), getWorld().capturedBlockStates.stream().map(state -> org.bukkit.craftbukkit.block.CraftBlockState.getBlockState(getWorld(), state.getPosition())).collect(java.util.stream.Collectors.toList()), org.bukkit.PortalType.ENDER); ++ if (!event.callEvent()) { ++ // revert captured blocks ++ for (org.bukkit.craftbukkit.block.CraftBlockState state : getWorld().capturedBlockStates) { ++ state.update(true); ++ } ++ } ++ } ++ getWorld().capturedTileEntities.clear(); ++ getWorld().capturedBlockStates.clear(); ++ } ++ // Purpur end ++ ++ private void generateExitPortal(boolean active) { a(active); } // Purpur - OBFHELPER + private void a(boolean flag) { + WorldGenEndTrophy worldgenendtrophy = new WorldGenEndTrophy(flag); + +-- +2.23.0.rc1 +