diff --git a/api/src/main/java/net/kyori/adventure/audience/Audience.java b/api/src/main/java/net/kyori/adventure/audience/Audience.java
index 9efd225a5..aeb23ff1b 100644
--- a/api/src/main/java/net/kyori/adventure/audience/Audience.java
+++ b/api/src/main/java/net/kyori/adventure/audience/Audience.java
@@ -33,7 +33,6 @@
import java.util.function.Predicate;
import java.util.stream.Collector;
import net.kyori.adventure.bossbar.BossBar;
-import net.kyori.adventure.bossbar.BossBarViewer;
import net.kyori.adventure.chat.ChatType;
import net.kyori.adventure.chat.SignedMessage;
import net.kyori.adventure.dialog.DialogLike;
@@ -50,6 +49,7 @@
import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.title.Title;
import net.kyori.adventure.title.TitlePart;
+import org.jetbrains.annotations.UnmodifiableView;
/**
* A receiver of Minecraft media.
@@ -95,7 +95,6 @@
* and any new methods will be stubbed by default.
*
* @see ForwardingAudience
- * @see BossBarViewer
* @since 4.0.0
*/
public interface Audience extends Pointered {
@@ -441,6 +440,17 @@ default void showBossBar(final BossBar bar) {
default void hideBossBar(final BossBar bar) {
}
+ /**
+ * Gets an unmodifiable view of all known currently active bossbars.
+ *
+ * @return an unmodifiable view of all known currently active bossbars
+ * @since 4.14.0
+ */
+ @UnmodifiableView
+ default Iterable extends BossBar> activeBossBars() {
+ return List.of();
+ }
+
/**
* Plays a sound at the location of the recipient of the sound.
*
diff --git a/api/src/main/java/net/kyori/adventure/audience/ForwardingAudience.java b/api/src/main/java/net/kyori/adventure/audience/ForwardingAudience.java
index 09b7eec27..bafd5da0e 100644
--- a/api/src/main/java/net/kyori/adventure/audience/ForwardingAudience.java
+++ b/api/src/main/java/net/kyori/adventure/audience/ForwardingAudience.java
@@ -25,8 +25,10 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
import java.util.Optional;
+import java.util.Set;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -46,6 +48,7 @@
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.UnknownNullability;
+import org.jetbrains.annotations.UnmodifiableView;
import org.jspecify.annotations.Nullable;
/**
@@ -162,6 +165,16 @@ default void hideBossBar(final BossBar bar) {
for (final Audience audience : this.audiences()) audience.hideBossBar(bar);
}
+ @Override
+ default @UnmodifiableView Iterable extends BossBar> activeBossBars() {
+ final Set bossBars = new HashSet<>();
+ for (final Audience audience : this.audiences()) {
+ for (final BossBar bb : audience.activeBossBars()) bossBars.add(bb);
+ }
+
+ return bossBars;
+ }
+
@Override
default void playSound(final Sound sound) {
for (final Audience audience : this.audiences()) audience.playSound(sound);
@@ -335,6 +348,11 @@ default void hideBossBar(final BossBar bar) {
this.audience().hideBossBar(bar);
}
+ @Override
+ default @UnmodifiableView Iterable extends BossBar> activeBossBars() {
+ return this.audience().activeBossBars();
+ }
+
@Override
default void playSound(final Sound sound) {
this.audience().playSound(sound);
diff --git a/api/src/main/java/net/kyori/adventure/bossbar/BossBar.java b/api/src/main/java/net/kyori/adventure/bossbar/BossBar.java
index 08b8da552..70e704a4d 100644
--- a/api/src/main/java/net/kyori/adventure/bossbar/BossBar.java
+++ b/api/src/main/java/net/kyori/adventure/bossbar/BossBar.java
@@ -335,7 +335,7 @@ default BossBar name(final ComponentLike name) {
* @since 4.14.0
*/
@UnmodifiableView
- Iterable extends BossBarViewer> viewers();
+ Iterable extends Audience> viewers();
/**
* Show this bossbar to {@code viewer}.
diff --git a/api/src/main/java/net/kyori/adventure/bossbar/BossBarImpl.java b/api/src/main/java/net/kyori/adventure/bossbar/BossBarImpl.java
index c044f35b5..b1966a882 100644
--- a/api/src/main/java/net/kyori/adventure/bossbar/BossBarImpl.java
+++ b/api/src/main/java/net/kyori/adventure/bossbar/BossBarImpl.java
@@ -32,6 +32,7 @@
import java.util.function.BiConsumer;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
+import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.util.Services;
import org.jspecify.annotations.Nullable;
@@ -261,7 +262,7 @@ public BossBar removeListener(final Listener listener) {
}
@Override
- public Iterable extends BossBarViewer> viewers() {
+ public Iterable extends Audience> viewers() {
if (this.implementation != null) {
return this.implementation.viewers();
}
diff --git a/api/src/main/java/net/kyori/adventure/bossbar/BossBarImplementation.java b/api/src/main/java/net/kyori/adventure/bossbar/BossBarImplementation.java
index 1362dc350..9b6645fdf 100644
--- a/api/src/main/java/net/kyori/adventure/bossbar/BossBarImplementation.java
+++ b/api/src/main/java/net/kyori/adventure/bossbar/BossBarImplementation.java
@@ -24,6 +24,7 @@
package net.kyori.adventure.bossbar;
import java.util.List;
+import net.kyori.adventure.audience.Audience;
import org.jetbrains.annotations.ApiStatus;
/**
@@ -54,7 +55,7 @@ static I get(final BossBar bar, final Class
* @since 4.14.0
*/
@ApiStatus.Internal
- default Iterable extends BossBarViewer> viewers() {
+ default Iterable extends Audience> viewers() {
return List.of();
}
diff --git a/api/src/main/java/net/kyori/adventure/bossbar/BossBarViewer.java b/api/src/main/java/net/kyori/adventure/bossbar/BossBarViewer.java
deleted file mode 100644
index dc81866cb..000000000
--- a/api/src/main/java/net/kyori/adventure/bossbar/BossBarViewer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * This file is part of adventure, licensed under the MIT License.
- *
- * Copyright (c) 2017-2025 KyoriPowered
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-package net.kyori.adventure.bossbar;
-
-import org.jetbrains.annotations.UnmodifiableView;
-
-/**
- * Something that can view a {@link BossBar}.
- *
- * @since 4.14.0
- */
-public interface BossBarViewer {
- /**
- * Gets an unmodifiable view of all known currently active bossbars.
- *
- * @return an unmodifiable view of all known currently active bossbars
- * @since 4.14.0
- */
- @UnmodifiableView
- Iterable extends BossBar> activeBossBars();
-}
diff --git a/build-logic/src/main/kotlin/adventure.common-conventions.gradle.kts b/build-logic/src/main/kotlin/adventure.common-conventions.gradle.kts
index 0e36d1f76..8a8d6f522 100644
--- a/build-logic/src/main/kotlin/adventure.common-conventions.gradle.kts
+++ b/build-logic/src/main/kotlin/adventure.common-conventions.gradle.kts
@@ -84,7 +84,15 @@ indraCrossdoc {
tasks {
javadoc {
val options = options as? StandardJavadocDocletOptions ?: return@javadoc
+<<<<<<< turbo/no_bbv
+ options.tags(
+ "obsolete:a:Obsolete",
+ "sinceMinecraft:a:Since Minecraft:",
+ "obsoleteSinceMinecraft:a:Obsolete since Minecraft",
+ )
+=======
options.applyCommonJavadocOptions()
+>>>>>>> main/5
}
jacocoTestReport {