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 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 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 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 viewers(); + Iterable 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 viewers() { + public Iterable 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 viewers() { + default Iterable 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 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 {