8000 Prevent duplicate raider in RaidSpawnWaveEvent list (#12040) · PaperMC/Paper@51acc80 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit 51acc80

Browse files
authored
Prevent duplicate raider in RaidSpawnWaveEvent list (#12040)
1 parent cb6c57e commit 51acc80

File tree

2 files changed

+16
-38
lines changed

2 files changed

+16
-38
lines changed

paper-server/patches/sources/net/minecraft/world/entity/raid/Raid.java.patch

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -99,42 +99,20 @@
9999
this.stop();
100100
return;
101101
}
102-
@@ -491,6 +_,10 @@
102+
@@ -486,7 +_,7 @@
103+
104+
private void spawnGroup(BlockPos pos) {
105+
boolean flag = false;
106+
- int i = this.groupsSpawned + 1;
107+
+ int i = this.groupsSpawned + 1; final int wave = i; // Paper - OBFHELPER
108+
this.totalHealth = 0.0F;
103109
DifficultyInstance currentDifficultyAt = this.level.getCurrentDifficultyAt(pos);
104110
boolean shouldSpawnBonusGroup = this.shouldSpawnBonusGroup();
105-
106-
+ // CraftBukkit start
107-
+ Raider leader = null;
108-
+ List<Raider> raiders = new java.util.ArrayList<>();
109-
+ // CraftBukkit end
110-
for (Raid.RaiderType raiderType : Raid.RaiderType.VALUES) {
111-
int i1 = this.getDefaultNumSpawns(raiderType, i, shouldSpawnBonusGroup)
112-
+ this.getPotentialBonusSpawns(raiderType, this.random, i, currentDifficultyAt, shouldSpawnBonusGroup);
113-
@@ -506,9 +_,11 @@
114-
raider.setPatrolLeader(true);
115-
this.setLeader(i, raider);
116-
flag = true;
117-
+ leader = raider; // CraftBukkit
118-
}
119-
120-
this.joinRaid(i, raider, pos, false);
121-
+ raiders.add(raider); // CraftBukkit
122-
if (raiderType.entityType == EntityType.RAVAGER) {
123-
Raider raider1 = null;
124-
if (i == this.getNumGroups(Difficulty.NORMAL)) {
125-
@@ -526,6 +_,7 @@
126-
this.joinRaid(i, raider1, pos, false);
127-
raider1.moveTo(pos, 0.0F, 0.0F);
128-
raider1.startRiding(raider);
129-
+ raiders.add(raider); // CraftBukkit
130-
}
131-
}
132-
}
133111
@@ -535,6 +_,7 @@
134112
this.groupsSpawned++;
135113
this.updateBossbar();
136114
this.setDirty();
137-
+ org.bukkit.craftbukkit.event.CraftEventFactory.callRaidSpawnWaveEvent(this, leader, raiders); // CraftBukkit
115+
+ org.bukkit.craftbukkit.event.CraftEventFactory.callRaidSpawnWaveEvent(this, java.util.Objects.requireNonNull(this.getLeader(wave)), this.groupRaiderMap.get(wave)); // CraftBukkit
138116
}
139117

140118
public void joinRaid(int wave, Raider raider, @Nullable BlockPos pos, boolean isRecruited) {

paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.EnumMap;
1313
import java.util.List;
1414
import java.util.Map;
15+
import java.util.Set;
1516
import java.util.stream.Collectors;
1617
import java.util.stream.Stream;
1718
import javax.annotation.Nullable;
@@ -87,7 +88,6 @@
8788
import org.bukkit.craftbukkit.entity.CraftEntity;
8889
import org.bukkit.craftbukkit.entity.CraftLivingEntity;
8990
import org.bukkit.craftbukkit.entity.CraftPlayer;
90-
import org.bukkit.craftbukkit.entity.CraftRaider;
9191
import org.bukkit.craftbukkit.entity.CraftSpellcaster;
9292
import org.bukkit.craftbukkit.inventory.CraftInventoryCrafting;
9393
import org.bukkit.craftbukkit.inventory.CraftItemStack;
@@ -2015,14 +2015,14 @@ public static void callRaidStopEvent(Raid raid, RaidStopEvent.Reason reason) {
20152015
Bukkit.getPluginManager().callEvent(event);
20162016
}
20172017

2018-
public static void callRaidSpawnWaveEvent(Raid raid, net.minecraft.world.entity.raid.Raider leader, List<net.minecraft.world.entity.raid.Raider> raiders) {
2019-
Raider craftLeader = (CraftRaider) leader.getBukkitEntity();
2020-
List<Raider> craftRaiders = new ArrayList<>();
2021-
for (net.minecraft.world.entity.raid.Raider entityRaider : raiders) {
2022-
craftRaiders.add((Raider) entityRaider.getBukkitEntity());
2018+
public static void callRaidSpawnWaveEvent(Raid raid, net.minecraft.world.entity.raid.Raider leader, Set<net.minecraft.world.entity.raid.Raider> raiders) {
2019+
Raider bukkitLeader = (Raider) leader.getBukkitEntity();
2020+
List<Raider> bukkitRaiders = new ArrayList<>(raiders.size());
2021+
for (net.minecraft.world.entity.raid.Raider raider : raiders) {
2022+
bukkitRaiders.add((Raider) raider.getBukkitEntity());
20232023
}
2024-
RaidSpawnWaveEvent event = new RaidSpawnWaveEvent(new CraftRaid(raid), raid.getLevel().getWorld(), craftLeader, craftRaiders);
2025-
Bukkit.getPluginManager().callEvent(event);
2024+
RaidSpawnWaveEvent event = new RaidSpawnWaveEvent(new CraftRaid(raid), raid.getLevel().getWorld(), bukkitLeader, bukkitRaiders);
2025+
event.callEvent();
20262026
}
20272027

20282028
public static LootGenerateEvent callLootGenerateEvent(Container inventory, LootTable lootTable, LootContext lootInfo, List<ItemStack> loot, boolean plugin) {

0 commit comments

Comments
 (0)
0