--- a/net/minecraft/world/entity/raid/Raids.java +++ b/net/minecraft/world/entity/raid/Raids.java @@ -118,19 +121,32 @@ Raid raid = this.getOrCreateRaid(serverPlayer.serverLevel(), blockPos1); boolean flag = false; if (!raid.isStarted()) { + /* CraftBukkit - moved down if (!this.raidMap.containsKey(raid.getId())) { this.raidMap.put(raid.getId(), raid); } flag = true; - } else if (raid.getBadOmenLevel() < raid.getMaxBadOmenLevel()) { + // CraftBukkit start - fixed a bug with raid: players could add up Bad Omen level even when the raid had finished + } else if (raid.isInProgress() && raid.getBadOmenLevel() < raid.getMaxBadOmenLevel()) { flag = true; + // CraftBukkit end } else { serverPlayer.removeEffect(MobEffects.BAD_OMEN); serverPlayer.connection.send(new ClientboundEntityEventPacket(serverPlayer, (byte)43)); } if (flag) { + // CraftBukkit start + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callRaidTriggerEvent(raid, serverPlayer)) { + serverPlayer.removeEffect(MobEffects.BAD_OMEN); + return null; + } + + if (!this.raidMap.containsKey(raid.getId())) { + this.raidMap.put(raid.getId(), raid); + } + // CraftBukkit end raid.absorbBadOmen(serverPlayer); serverPlayer.connection.send(new ClientboundEntityEventPacket(serverPlayer, (byte)43)); if (!raid.hasFirstWaveSpawned()) {