mirror of
https://github.com/Minestom/Minestom.git
synced 2025-02-12 18:31:41 +01:00
Merge pull request #193 from kezz/fix-boss-bar-progress
Ensure boss bars are registered on creation
This commit is contained in:
commit
cadbdd8300
@ -25,16 +25,13 @@ final class BossBarHolder implements Viewable {
|
|||||||
protected final UUID uuid = UUID.randomUUID();
|
protected final UUID uuid = UUID.randomUUID();
|
||||||
protected final Set<Player> players = new CopyOnWriteArraySet<>();
|
protected final Set<Player> players = new CopyOnWriteArraySet<>();
|
||||||
protected final BossBar bar;
|
protected final BossBar bar;
|
||||||
protected boolean registered;
|
|
||||||
|
|
||||||
BossBarHolder(@NotNull BossBar bar) {
|
BossBarHolder(@NotNull BossBar bar) {
|
||||||
this.bar = bar;
|
this.bar = bar;
|
||||||
this.registered = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull BossBarPacket createRemovePacket() {
|
@NotNull BossBarPacket createRemovePacket() {
|
||||||
return this.createGenericPacket(REMOVE, packet -> {
|
return this.createGenericPacket(REMOVE, packet -> { });
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull BossBarPacket createAddPacket() {
|
@NotNull BossBarPacket createAddPacket() {
|
||||||
|
@ -56,7 +56,7 @@ class BossBarListener implements BossBar.Listener {
|
|||||||
private void doIfRegistered(@NotNull BossBar bar, @NotNull Consumer<BossBarHolder> consumer) {
|
private void doIfRegistered(@NotNull BossBar bar, @NotNull Consumer<BossBarHolder> consumer) {
|
||||||
BossBarHolder holder = this.manager.bars.get(bar);
|
BossBarHolder holder = this.manager.bars.get(bar);
|
||||||
|
|
||||||
if (holder != null && holder.registered) {
|
if (holder != null) {
|
||||||
consumer.accept(holder);
|
consumer.accept(holder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages all boss bars known to this Minestom instance. Although this class can be used
|
* Manages all boss bars known to this Minestom instance. Although this class can be used
|
||||||
@ -58,9 +59,9 @@ public class BossBarManager {
|
|||||||
* @param bar the boss bar to hide
|
* @param bar the boss bar to hide
|
||||||
*/
|
*/
|
||||||
public void removeBossBar(@NotNull Player player, @NotNull BossBar bar) {
|
public void removeBossBar(@NotNull Player player, @NotNull BossBar bar) {
|
||||||
BossBarHolder holder = this.getOrCreateHandler(bar);
|
BossBarHolder holder = this.bars.get(bar);
|
||||||
|
|
||||||
if (holder.removeViewer(player)) {
|
if (holder != null && holder.removeViewer(player)) {
|
||||||
player.getPlayerConnection().sendPacket(holder.createRemovePacket());
|
player.getPlayerConnection().sendPacket(holder.createRemovePacket());
|
||||||
this.removePlayer(player, holder);
|
this.removePlayer(player, holder);
|
||||||
}
|
}
|
||||||
@ -75,14 +76,7 @@ public class BossBarManager {
|
|||||||
*/
|
*/
|
||||||
public void addBossBar(@NotNull Collection<Player> players, @NotNull BossBar bar) {
|
public void addBossBar(@NotNull Collection<Player> players, @NotNull BossBar bar) {
|
||||||
BossBarHolder holder = this.getOrCreateHandler(bar);
|
BossBarHolder holder = this.getOrCreateHandler(bar);
|
||||||
Collection<Player> addedPlayers = new ArrayList<>();
|
Collection<Player> addedPlayers = players.stream().filter(holder::addViewer).collect(Collectors.toList());
|
||||||
|
|
||||||
for (Player player : players) {
|
|
||||||
if (holder.addViewer(player)) {
|
|
||||||
addedPlayers.add(player);
|
|
||||||
this.playerBars.computeIfAbsent(player.getUuid(), uuid -> new HashSet<>()).add(holder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!addedPlayers.isEmpty()) {
|
if (!addedPlayers.isEmpty()) {
|
||||||
PacketUtils.sendGroupedPacket(addedPlayers, holder.createAddPacket());
|
PacketUtils.sendGroupedPacket(addedPlayers, holder.createAddPacket());
|
||||||
@ -96,19 +90,15 @@ public class BossBarManager {
|
|||||||
* @param bar the boss bar to hide
|
* @param bar the boss bar to hide
|
||||||
*/
|
*/
|
||||||
public void removeBossBar(@NotNull Collection<Player> players, @NotNull BossBar bar) {
|
public void removeBossBar(@NotNull Collection<Player> players, @NotNull BossBar bar) {
|
||||||
BossBarHolder holder = this.getOrCreateHandler(bar);
|
BossBarHolder holder = this.bars.get(bar);
|
||||||
Collection<Player> removedPlayers = new ArrayList<>();
|
|
||||||
|
|
||||||
for (Player player : players) {
|
if (holder != null) {
|
||||||
if (holder.removeViewer(player)) {
|
Collection<Player> removedPlayers = players.stream().filter(holder::removeViewer).collect(Collectors.toList());
|
||||||
removedPlayers.add(player);
|
|
||||||
this.removePlayer(player, holder);
|
if (!removedPlayers.isEmpty()) {
|
||||||
|
PacketUtils.sendGroupedPacket(removedPlayers, holder.createRemovePacket());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!removedPlayers.isEmpty()) {
|
|
||||||
PacketUtils.sendGroupedPacket(removedPlayers, holder.createRemovePacket());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user