mirror of https://github.com/PaperMC/Paper.git
Merge 4afa0b2139
into 4ea67abd46
This commit is contained in:
commit
5f9f3aeffa
|
@ -0,0 +1,23 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||
Date: Sun, 23 May 2021 18:32:26 -0700
|
||||
Subject: [PATCH] Add ender dragon boss spawn reason
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java b/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java
|
||||
index 6d5c81824c7cb36f0c76baf532434fb7bf233da6..38d6f20714403b3fc9ee1c3d3bfc8aff9cecac75 100644
|
||||
--- a/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java
|
||||
+++ b/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java
|
||||
@@ -177,6 +177,12 @@ public class CreatureSpawnEvent extends EntitySpawnEvent {
|
||||
* When a piglin is converted to a zombified piglin.
|
||||
*/
|
||||
PIGLIN_ZOMBIFIED,
|
||||
+ // Paper start
|
||||
+ /**
|
||||
+ * When an ender dragon is spawned as part of a boss battle.
|
||||
+ */
|
||||
+ ENDER_DRAGON_BOSS,
|
||||
+ // Paper end
|
||||
/**
|
||||
* When an entity is created by a cast spell.
|
||||
*/
|
|
@ -0,0 +1,53 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||
Date: Sun, 23 May 2021 18:32:38 -0700
|
||||
Subject: [PATCH] Fix cancelling ender dragon spawn
|
||||
|
||||
Previously, the boss bar and fog would still show up if the dragon spawn
|
||||
had been cancelled.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
||||
index f8d846345c1cc3c78f9ac14635b26f2affc77190..7ea2f23a90c74b82dc11aa18d8b369f26c037bee 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
||||
@@ -250,7 +250,12 @@ public class EndDragonFight {
|
||||
if (spawnState == DragonRespawnAnimation.END) {
|
||||
this.respawnStage = null;
|
||||
this.dragonKilled = false;
|
||||
- EnderDragon enderDragon = this.createNewDragon();
|
||||
+ // Paper start - handle cancelled CreatureSpawnEvent
|
||||
+ EnderDragon enderDragon = this.createNewDragon(true);
|
||||
+ if (enderDragon == null) {
|
||||
+ return;
|
||||
+ }
|
||||
+ // Paper end
|
||||
|
||||
for(ServerPlayer serverPlayer : this.dragonEvent.getPlayers()) {
|
||||
CriteriaTriggers.SUMMONED_ENTITY.trigger(serverPlayer, enderDragon);
|
||||
@@ -422,11 +427,25 @@ public class EndDragonFight {
|
||||
}
|
||||
|
||||
private EnderDragon createNewDragon() {
|
||||
+ // Paper start
|
||||
+ return this.createNewDragon(false);
|
||||
+ }
|
||||
+ private @Nullable EnderDragon createNewDragon(boolean respawn) {
|
||||
+ // Paper end
|
||||
this.level.getChunkAt(new BlockPos(0, 128, 0));
|
||||
EnderDragon enderDragon = EntityType.ENDER_DRAGON.create(this.level);
|
||||
enderDragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN);
|
||||
enderDragon.moveTo(0.0D, 128.0D, 0.0D, this.level.random.nextFloat() * 360.0F, 0.0F);
|
||||
- this.level.addFreshEntity(enderDragon);
|
||||
+ // Paper start - handle cancelled CreatureSpawnEvent
|
||||
+ if (!this.level.addFreshEntity(enderDragon, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.ENDER_DRAGON_BOSS)) {
|
||||
+ this.dragonKilled = true;
|
||||
+ this.dragonEvent.setVisible(false);
|
||||
+ if (respawn) {
|
||||
+ this.spawnExitPortal(true); // revert to lit portal
|
||||
+ }
|
||||
+ return null;
|
||||
+ }
|
||||
+ // Paper end
|
||||
this.dragonUUID = enderDragon.getUUID();
|
||||
this.resetSpikeCrystals(); // Paper
|
||||
return enderDragon;
|
Loading…
Reference in New Issue