--- a/net/minecraft/world/entity/raid/Raid.java +++ b/net/minecraft/world/entity/raid/Raid.java @@ -186,6 +186,12 @@ return this.status == Raid.Status.LOSS; } + // CraftBukkit start + public boolean isInProgress() { + return this.status == Status.ONGOING; + } + // CraftBukkit end + public float getTotalHealth() { return this.totalHealth; } @@ -276,6 +282,7 @@ this.active = worldserver.hasChunkAt(this.center); if (worldserver.getDifficulty() == EnumDifficulty.PEACEFUL) { + org.bukkit.craftbukkit.event.CraftEventFactory.callRaidStopEvent(this, worldserver, org.bukkit.event.raid.RaidStopEvent.Reason.PEACE); // CraftBukkit this.stop(); return; } @@ -295,13 +302,16 @@ if (!worldserver.isVillage(this.center)) { if (this.groupsSpawned > 0) { this.status = Raid.Status.LOSS; + org.bukkit.craftbukkit.event.CraftEventFactory.callRaidFinishEvent(this, worldserver, new java.util.ArrayList<>()); // CraftBukkit } else { + org.bukkit.craftbukkit.event.CraftEventFactory.callRaidStopEvent(this, worldserver, org.bukkit.event.raid.RaidStopEvent.Reason.NOT_IN_VILLAGE); // CraftBukkit this.stop(); } } ++this.ticksActive; if (this.ticksActive >= 48000L) { + org.bukkit.craftbukkit.event.CraftEventFactory.callRaidStopEvent(this, worldserver, org.bukkit.event.raid.RaidStopEvent.Reason.TIMEOUT); // CraftBukkit this.stop(); return; } @@ -370,6 +380,7 @@ } if (j > 5) { + org.bukkit.craftbukkit.event.CraftEventFactory.callRaidStopEvent(this, worldserver, org.bukkit.event.raid.RaidStopEvent.Reason.UNSPAWNABLE); // CraftBukkit this.stop(); break; } @@ -381,6 +392,7 @@ } else { this.status = Raid.Status.VICTORY; + List winners = new java.util.ArrayList<>(); // CraftBukkit for (UUID uuid : this.heroesOfTheVillage) { Entity entity = worldserver.getEntity(uuid); @@ -394,10 +406,12 @@ entityplayer.awardStat(StatisticList.RAID_WIN); CriterionTriggers.RAID_WIN.trigger(entityplayer); + winners.add(entityplayer.getBukkitEntity()); // CraftBukkit } } } } + org.bukkit.craftbukkit.event.CraftEventFactory.callRaidFinishEvent(this, worldserver, winners); // CraftBukkit } } @@ -405,6 +419,7 @@ } else if (this.isOver()) { ++this.celebrationTicks; if (this.celebrationTicks >= 600) { + org.bukkit.craftbukkit.event.CraftEventFactory.callRaidStopEvent(this, worldserver, org.bukkit.event.raid.RaidStopEvent.Reason.FINISHED); // CraftBukkit this.stop(); return; } @@ -526,6 +541,10 @@ DifficultyDamageScaler difficultydamagescaler = worldserver.getCurrentDifficultyAt(blockposition); boolean flag1 = this.shouldSpawnBonusGroup(); + // CraftBukkit start + EntityRaider leader = null; + List raiders = new java.util.ArrayList<>(); + // CraftBukkit end for (Raid.Wave raid_wave : Raid.Wave.VALUES) { int j = this.getDefaultNumSpawns(raid_wave, i, flag1) + this.getPotentialBonusSpawns(raid_wave, this.random, i, difficultydamagescaler, flag1); int k = 0; @@ -541,9 +560,11 @@ entityraider.setPatrolLeader(true); this.setLeader(i, entityraider); flag = true; + leader = entityraider; // CraftBukkit } this.joinRaid(worldserver, i, entityraider, blockposition, false); + raiders.add(entityraider); // CraftBukkit if (raid_wave.entityType == EntityTypes.RAVAGER) { EntityRaider entityraider1 = null; @@ -562,6 +583,7 @@ this.joinRaid(worldserver, i, entityraider1, blockposition, false); entityraider1.snapTo(blockposition, 0.0F, 0.0F); entityraider1.startRiding(entityraider); + raiders.add(entityraider); // CraftBukkit } } } @@ -571,6 +593,7 @@ ++this.groupsSpawned; this.updateBossbar(); this.setDirty(worldserver); + org.bukkit.craftbukkit.event.CraftEventFactory.callRaidSpawnWaveEvent(this, worldserver, leader, raiders); // CraftBukkit } public void joinRaid(WorldServer worldserver, int i, EntityRaider entityraider, @Nullable BlockPosition blockposition, boolean flag) { @@ -586,7 +609,7 @@ entityraider.finalizeSpawn(worldserver, worldserver.getCurrentDifficultyAt(blockposition), EntitySpawnReason.EVENT, (GroupDataEntity) null); entityraider.applyRaidBuffs(worldserver, i, false); entityraider.setOnGround(true); - worldserver.addFreshEntityWithPassengers(entityraider); + worldserver.addFreshEntityWithPassengers(entityraider, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.RAID); // CraftBukkit } } @@ -809,6 +832,12 @@ this.heroesOfTheVillage.add(entity.getUUID()); } + // CraftBukkit start - a method to get all raiders + public java.util.Collection getRaiders() { + return this.groupRaiderMap.values().stream().flatMap(Set::stream).collect(java.util.stream.Collectors.toSet()); + } + // CraftBukkit end + private static enum Status implements INamable { ONGOING("ongoing"), VICTORY("victory"), LOSS("loss"), STOPPED("stopped");