Add back EntityCreatePortalEvent for EnderDragon

This commit is contained in:
William Blake Galbreath
2019-10-19 03:55:15 -05:00
parent 3a234c378e
commit 05c2754d05
2 changed files with 152 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
From ab115fed95481c6c247f4b64f57d9165af7ded7c Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
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<BlockState> blocks;
--
2.23.0.rc1

View File

@@ -0,0 +1,105 @@
From cd0896d88b091d73b49281f65160d443dd40cc2b Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <blake.galbreath@gmail.com>
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<Entity> 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<Integer> e;
+ private final WorldServer d; public WorldServer getWorld() { return d; } // Purpur - OBFHELPER
+ private final List<Integer> e; public List<Integer> 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