139 lines
6.3 KiB
Diff

--- 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<org.bukkit.entity.Player> 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<EntityRaider> 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<EntityRaider> 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");