diff --git a/src/main/java/net/minestom/server/bossbar/BarColor.java b/src/main/java/net/minestom/server/bossbar/BarColor.java
deleted file mode 100644
index 0467e4235..000000000
--- a/src/main/java/net/minestom/server/bossbar/BarColor.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package net.minestom.server.bossbar;
-
-/**
- * Represents the displayed color of a {@link BossBar}.
- * @deprecated Use {@link net.kyori.adventure.bossbar.BossBar.Color}
- */
-@Deprecated
-public enum BarColor {
- PINK,
- BLUE,
- RED,
- GREEN,
- YELLOW,
- PURPLE,
- WHITE;
-
- public net.kyori.adventure.bossbar.BossBar.Color asAdventureColor() {
- return net.kyori.adventure.bossbar.BossBar.Color.valueOf(this.name());
- }
-}
diff --git a/src/main/java/net/minestom/server/bossbar/BarDivision.java b/src/main/java/net/minestom/server/bossbar/BarDivision.java
deleted file mode 100644
index 07bd95a1f..000000000
--- a/src/main/java/net/minestom/server/bossbar/BarDivision.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package net.minestom.server.bossbar;
-
-/**
- * Used to define the number of segments on a {@link BossBar}.
- *
- * @deprecated Use {@link net.kyori.adventure.bossbar.BossBar.Overlay}
- */
-@Deprecated
-public enum BarDivision {
- SOLID,
- SEGMENT_6,
- SEGMENT_10,
- SEGMENT_12,
- SEGMENT_20;
-
- public net.kyori.adventure.bossbar.BossBar.Overlay asAdventureOverlay() {
- return net.kyori.adventure.bossbar.BossBar.Overlay.values()[this.ordinal()];
- }
-}
diff --git a/src/main/java/net/minestom/server/bossbar/BossBar.java b/src/main/java/net/minestom/server/bossbar/BossBar.java
deleted file mode 100644
index c64b2265a..000000000
--- a/src/main/java/net/minestom/server/bossbar/BossBar.java
+++ /dev/null
@@ -1,300 +0,0 @@
-package net.minestom.server.bossbar;
-
-import net.minestom.server.Viewable;
-import net.minestom.server.chat.JsonMessage;
-import net.minestom.server.entity.Player;
-import net.minestom.server.network.packet.server.play.BossBarPacket;
-import net.minestom.server.utils.MathUtils;
-import net.minestom.server.utils.validate.Check;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.*;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-/**
- * Represents a boss bar which is displayed on the top of the client screen (max amount of boss bar defined by {@link #MAX_BOSSBAR}).
- *
- * To use it, create a new instance using the constructor
- * and add the {@link Player} you want using {@link #addViewer(Player)} and remove them using {@link #removeViewer(Player)}.
- *
- * You can retrieve all the boss bars of a {@link Player} with {@link #getBossBars(Player)}.
- *
- * @deprecated Use {@link net.kyori.adventure.bossbar.BossBar}
- */
-@Deprecated
-public class BossBar implements Viewable {
-
- private static final int MAX_BOSSBAR = 7;
- private static final Map> PLAYER_BOSSBAR_MAP = new HashMap<>();
-
- private final UUID uuid = UUID.randomUUID();
- private final Set viewers = new CopyOnWriteArraySet<>();
- private final Set unmodifiableViewers = Collections.unmodifiableSet(viewers);
-
- private JsonMessage title;
- private float progress;
- private BarColor color;
- private BarDivision division;
- private byte flags;
-
- /**
- * Creates a new {@link BossBar}.
- *
- * @param title the boss bar title
- * @param color the boss bar color
- * @param division the boss bar division
- */
- public BossBar(@NotNull JsonMessage title, @NotNull BarColor color, @NotNull BarDivision division) {
- this.title = title;
- this.color = color;
- this.division = division;
- }
-
- /**
- * Gets all the visible boss bars of a {@link Player}.
- *
- * @param player the player to check the boss bars
- * @return all the visible boss bars of the player, null if not any
- */
- @Nullable
- public static Set getBossBars(@NotNull Player player) {
- return PLAYER_BOSSBAR_MAP.getOrDefault(player.getUuid(), null);
- }
-
- @Override
- public synchronized boolean addViewer(@NotNull Player player) {
- // Check already viewer
- if (isViewer(player)) {
- return false;
- }
- // Check max boss bar count
- final Set playerBossBars = getBossBars(player);
- if (playerBossBars != null && playerBossBars.size() >= MAX_BOSSBAR) {
- return false;
- }
-
- addToPlayer(player);
- return viewers.add(player);
- }
-
- @Override
- public synchronized boolean removeViewer(@NotNull Player player) {
- // Check not viewer
- final boolean result = this.viewers.remove(player);
- if (result) {
- removeToPlayer(player);
- }
- // Remove from the map
- removePlayer(player);
- return result;
- }
-
- @NotNull
- @Override
- public Set getViewers() {
- return unmodifiableViewers;
- }
-
- /**
- * Gets the bossbar title.
- *
- * @return the current title of the bossbar
- */
- @NotNull
- public JsonMessage getTitle() {
- return title;
- }
-
- /**
- * Changes the bossbar title.
- *
- * @param title the new title of the bossbar
- */
- public void setTitle(@NotNull JsonMessage title) {
- this.title = title;
- updateTitle();
- }
-
- /**
- * Gets the bossbar progress.
- *
- * @return the current progress of the bossbar
- */
- public float getProgress() {
- return progress;
- }
-
- /**
- * Changes the bossbar progress.
- *
- * @param progress the new progress bar percentage
- * @throws IllegalArgumentException if {@code progress} is not between 0 and 1
- */
- public void setProgress(float progress) {
- Check.argCondition(!MathUtils.isBetween(progress, 0, 1),
- "BossBar progress percentage should be between 0 and 1");
- this.progress = progress;
- updateProgress();
- }
-
- /**
- * Gets the bossbar color.
- *
- * @return the current bossbar color
- */
- @NotNull
- public BarColor getColor() {
- return color;
- }
-
- /**
- * Changes the bossbar color.
- *
- * @param color the new color of the bossbar
- */
- public void setColor(@NotNull BarColor color) {
- this.color = color;
- updateStyle();
- }
-
- /**
- * Gets the bossbar division.
- *
- * @return the current bossbar division
- */
- @NotNull
- public BarDivision getDivision() {
- return division;
- }
-
- /**
- * Changes the bossbar division.
- *
- * @param division the new bossbar division count
- */
- public void setDivision(@NotNull BarDivision division) {
- this.division = division;
- updateStyle();
- }
-
- /**
- * Gets the bossbar flags.
- *
- * @return the flags
- */
- public byte getFlags() {
- return flags;
- }
-
- /**
- * Sets the bossbar flags.
- *
- * @param flags the bossbar flags
- * @see Boss bar packet
- */
- public void setFlags(byte flags) {
- this.flags = flags;
- }
-
- /**
- * Deletes the boss bar and remove all of its viewers.
- */
- public void delete() {
- BossBarPacket bossBarPacket = new BossBarPacket();
- bossBarPacket.uuid = uuid;
- bossBarPacket.action = BossBarPacket.Action.REMOVE;
- sendPacketToViewers(bossBarPacket);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- BossBar bossBar = (BossBar) o;
- return Objects.equals(uuid, bossBar.uuid);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(uuid);
- }
-
- /**
- * Removes the player from the bossbar map.
- *
- * @param player the player to remove from the map
- */
- private void removePlayer(@NotNull Player player) {
- final UUID uuid = player.getUuid();
- if (!PLAYER_BOSSBAR_MAP.containsKey(uuid)) {
- return;
- }
- Set bossBars = PLAYER_BOSSBAR_MAP.get(uuid);
- bossBars.remove(this);
- if (bossBars.isEmpty()) {
- PLAYER_BOSSBAR_MAP.remove(uuid);
- }
- }
-
- /**
- * Sends a {@link BossBarPacket} to create the bossbar.
- *
- * Also add the bossbar to the player viewing list.
- *
- * @param player the player to create the bossbar to
- */
- private void addToPlayer(@NotNull Player player) {
- // Add to the map
- Set bossBars = PLAYER_BOSSBAR_MAP.computeIfAbsent(player.getUuid(), p -> new HashSet<>());
- bossBars.add(this);
-
- BossBarPacket bossBarPacket = new BossBarPacket();
- bossBarPacket.uuid = uuid;
- bossBarPacket.action = BossBarPacket.Action.ADD;
- bossBarPacket.title = title.asComponent();
- bossBarPacket.health = progress;
- bossBarPacket.color = color.asAdventureColor();
- bossBarPacket.overlay = division.asAdventureOverlay();
- bossBarPacket.flags = flags;
- player.getPlayerConnection().sendPacket(bossBarPacket);
- }
-
- /**
- * Sends a {@link BossBarPacket} to remove the bossbar.
- *
- * @param player the player to remove the bossbar to
- */
- private void removeToPlayer(@NotNull Player player) {
- if (!player.isRemoved()) {
- BossBarPacket bossBarPacket = new BossBarPacket();
- bossBarPacket.uuid = uuid;
- bossBarPacket.action = BossBarPacket.Action.REMOVE;
- player.getPlayerConnection().sendPacket(bossBarPacket);
- }
- }
-
- private void updateTitle() {
- BossBarPacket bossBarPacket = new BossBarPacket();
- bossBarPacket.uuid = uuid;
- bossBarPacket.action = BossBarPacket.Action.UPDATE_TITLE;
- bossBarPacket.title = title.asComponent();
- sendPacketToViewers(bossBarPacket);
- }
-
- private void updateProgress() {
- BossBarPacket bossBarPacket = new BossBarPacket();
- bossBarPacket.uuid = uuid;
- bossBarPacket.action = BossBarPacket.Action.UPDATE_HEALTH;
- bossBarPacket.health = progress;
- sendPacketToViewers(bossBarPacket);
- }
-
- private void updateStyle() {
- BossBarPacket bossBarPacket = new BossBarPacket();
- bossBarPacket.uuid = uuid;
- bossBarPacket.action = BossBarPacket.Action.UPDATE_STYLE;
- bossBarPacket.color = color.asAdventureColor();
- sendPacketToViewers(bossBarPacket);
- }
-}
diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java
index e0a28bf6c..48f36afbd 100644
--- a/src/main/java/net/minestom/server/entity/Player.java
+++ b/src/main/java/net/minestom/server/entity/Player.java
@@ -518,16 +518,6 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
if (getOpenInventory() != null)
getOpenInventory().removeViewer(this);
- // Boss bars cache
- {
- Set bossBars = net.minestom.server.bossbar.BossBar.getBossBars(this);
- if (bossBars != null) {
- for (net.minestom.server.bossbar.BossBar bossBar : bossBars) {
- bossBar.removeViewer(this);
- }
- }
- }
-
MinecraftServer.getBossBarManager().removeAllBossBars(this);
// Advancement tabs cache