mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 00:47:42 +01:00
Add back EntityCreatePortalEvent for EnderDragon
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user