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 6d66b23beb..ec2efaea4a 100644 --- a/api/src/main/java/net/kyori/adventure/audience/Audience.java +++ b/api/src/main/java/net/kyori/adventure/audience/Audience.java @@ -23,7 +23,10 @@ */ package net.kyori.adventure.audience; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -804,6 +807,38 @@ default void removeResourcePacks(final @NotNull ResourcePackInfoLike request, fi this.removeResourcePacks(request.asResourcePackInfo().id(), otherReqs); } + /** + * Clear resource packs with the provided ids if they are present. + * + * @param ids the ids of resource packs to remove + * @since 4.16.0 + * @sinceMinecraft 1.20.3 + */ + default void removeResourcePacks(final @NotNull Iterable ids) { + // break these out to id + arrays + final Iterator it = ids.iterator(); + if (!it.hasNext()) return; + + final UUID id = it.next(); + final UUID[] others; + if (!it.hasNext()) { + others = new UUID[0]; + } else if (ids instanceof Collection) { + others = new UUID[((Collection) ids).size() - 1]; + for (int i = 0; i < others.length; i++) { + others[i] = it.next(); + } + } else { + final List othersList = new ArrayList<>(); + while (it.hasNext()) { + othersList.add(it.next()); + } + others = othersList.toArray(new UUID[0]); + } + + this.removeResourcePacks(id, others); + } + /** * Clear resource packs with the provided ids if they are present. * 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 96fe4bdc00..e5282b6e03 100644 --- a/api/src/main/java/net/kyori/adventure/audience/ForwardingAudience.java +++ b/api/src/main/java/net/kyori/adventure/audience/ForwardingAudience.java @@ -206,6 +206,11 @@ default void sendResourcePacks(final @NotNull ResourcePackRequest request) { for (final Audience audience : this.audiences()) audience.sendResourcePacks(request); } + @Override + default void removeResourcePacks(final @NotNull Iterable ids) { + for (final Audience audience : this.audiences()) audience.removeResourcePacks(ids); + } + @Override default void removeResourcePacks(final @NotNull UUID id, final @NotNull UUID @NotNull ... others) { for (final Audience audience : this.audiences()) audience.removeResourcePacks(id, others); @@ -384,6 +389,11 @@ default void sendResourcePacks(final @NotNull ResourcePackRequest request) { this.audience().sendResourcePacks(request.callback(Audiences.unwrapCallback(this, this.audience(), request.callback()))); } + @Override + default void removeResourcePacks(final @NotNull Iterable ids) { + this.audience().removeResourcePacks(ids); + } + @Override default void removeResourcePacks(final @NotNull UUID id, final @NotNull UUID @NotNull ... others) { this.audience().removeResourcePacks(id, others);