SPIGOT-5853: DragonBattle#getEndPortalLocation() throws NPE on new world

* Add method to generate the end portal
This commit is contained in:
Parker Hawke 2020-06-27 11:09:01 +10:00 committed by md_5
parent 1601ec31e3
commit d424351010
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11
2 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,33 @@
--- a/net/minecraft/server/EnderDragonBattle.java
+++ b/net/minecraft/server/EnderDragonBattle.java
@@ -245,7 +245,7 @@
}
@Nullable
- private ShapeDetector.ShapeDetectorCollection j() {
+ public ShapeDetector.ShapeDetectorCollection j() { // PAIL private -> public, rename getExitPortalShape()
int i;
int j;
@@ -376,10 +376,10 @@
private void a(BlockPosition blockposition) {
this.world.triggerEffect(3000, blockposition, 0);
- WorldGenerator.END_GATEWAY.b((WorldGenFeatureConfiguration) WorldGenEndGatewayConfiguration.a()).a(this.world, this.world.getStructureManager(), this.world.getChunkProvider().getChunkGenerator(), new Random(), blockposition);
+ WorldGenerator.END_GATEWAY.b(WorldGenEndGatewayConfiguration.a()).a(this.world, this.world.getStructureManager(), this.world.getChunkProvider().getChunkGenerator(), new Random(), blockposition); // CraftBukkit - decompile error
}
- private void a(boolean flag) {
+ public void a(boolean flag) { // PAIL private -> public, rename generateExitPortal()
WorldGenEndTrophy worldgenendtrophy = new WorldGenEndTrophy(flag);
if (this.exitPortalLocation == null) {
@@ -388,7 +388,7 @@
}
}
- worldgenendtrophy.b((WorldGenFeatureConfiguration) WorldGenFeatureConfiguration.k).a(this.world, this.world.getStructureManager(), this.world.getChunkProvider().getChunkGenerator(), new Random(), this.exitPortalLocation);
+ worldgenendtrophy.b(WorldGenFeatureConfiguration.k).a(this.world, this.world.getStructureManager(), this.world.getChunkProvider().getChunkGenerator(), new Random(), this.exitPortalLocation); // CraftBukkit - decompile error
}
private EntityEnderDragon o() {

View File

@ -30,9 +30,23 @@ public class CraftDragonBattle implements DragonBattle {
@Override @Override
public Location getEndPortalLocation() { public Location getEndPortalLocation() {
if (handle.exitPortalLocation == null) {
return null;
}
return new Location(handle.world.getWorld(), handle.exitPortalLocation.getX(), handle.exitPortalLocation.getY(), handle.exitPortalLocation.getZ()); return new Location(handle.world.getWorld(), handle.exitPortalLocation.getX(), handle.exitPortalLocation.getY(), handle.exitPortalLocation.getZ());
} }
@Override
public boolean generateEndPortal(boolean withPortals) {
if (handle.exitPortalLocation != null || handle.j() != null) {
return false;
}
this.handle.a(withPortals);
return true;
}
@Override @Override
public boolean hasBeenPreviouslyKilled() { public boolean hasBeenPreviouslyKilled() {
return handle.isPreviouslyKilled(); return handle.isPreviouslyKilled();