Skip to content

Commit

Permalink
small changes
Browse files Browse the repository at this point in the history
  • Loading branch information
kashike committed Feb 18, 2023
1 parent 384c746 commit 2fa6d30
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 17 deletions.
27 changes: 23 additions & 4 deletions api/src/main/java/net/kyori/adventure/audience/Audiences.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,34 @@

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import net.kyori.adventure.text.ComponentLike;
import org.jetbrains.annotations.NotNull;

final class Audiences {
private Audiences() {
}

/**
* {@link Audience}-related utilities.
*
* @since 4.13.0
*/
public final class Audiences {
static final Collector<? super Audience, ?, ForwardingAudience> COLLECTOR = Collectors.collectingAndThen(
Collectors.toCollection(ArrayList::new),
audiences -> Audience.audience(Collections.unmodifiableCollection(audiences))
);

private Audiences() {
}

/**
* Creates an action to send a message.
*
* @param message the message to send
* @return an action to send a message
* @since 4.13.0
*/
public static @NotNull Consumer<? super Audience> sendingMessage(final @NotNull ComponentLike message) {
return audience -> audience.sendMessage(message);
}
}
26 changes: 13 additions & 13 deletions api/src/main/java/net/kyori/adventure/text/event/ClickCallback.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@

import java.time.Duration;
import java.time.temporal.TemporalAmount;
import java.util.function.Consumer;
import java.util.function.Predicate;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.builder.AbstractBuilder;
import net.kyori.adventure.permission.PermissionChecker;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.util.PlatformAPI;
import net.kyori.examination.Examinable;
import org.jetbrains.annotations.ApiStatus;
Expand All @@ -51,16 +51,16 @@ public interface ClickCallback<T extends Audience> {
* @param <N> the narrower type
* @param original the original callback of a narrower audience type
* @param type the audience type to accept
* @param failureMessage the message to send to the audience if it is not of the appropriate type
* @param otherwise the action to perform on the audience if it is not of the appropriate type
* @return a new callback
* @since 4.13.0
*/
static <W extends Audience, N extends W> @NotNull ClickCallback<W> widen(final @NotNull ClickCallback<N> original, final @NotNull Class<N> type, final @Nullable Component failureMessage) {
static <W extends Audience, N extends W> @NotNull ClickCallback<W> widen(final @NotNull ClickCallback<N> original, final @NotNull Class<N> type, final @Nullable Consumer<? super Audience> otherwise) {
return audience -> {
if (type.isInstance(audience)) {
original.accept(type.cast(audience));
} else if (failureMessage != null) {
audience.sendMessage(failureMessage);
} else if (otherwise != null) {
otherwise.accept(audience);
}
};
}
Expand All @@ -78,7 +78,7 @@ public interface ClickCallback<T extends Audience> {
* @since 4.13.0
*/
static <W extends Audience, N extends W> @NotNull ClickCallback<W> widen(final @NotNull ClickCallback<N> original, final @NotNull Class<N> type) {
return ClickCallback.widen(original, type, null);
return widen(original, type, null);
}

/**
Expand Down Expand Up @@ -106,16 +106,16 @@ public interface ClickCallback<T extends Audience> {
* Filter audiences that receive this click callback.
*
* @param filter the filter to test audiences with
* @param failureMessage a message to send if the conditions are not met
* @param otherwise the action to perform on the audience if the conditions are not met
* @return a filtered callback action
* @since 4.13.0
*/
default @NotNull ClickCallback<T> filter(final @NotNull Predicate<T> filter, final @Nullable Component failureMessage) {
default @NotNull ClickCallback<T> filter(final @NotNull Predicate<T> filter, final @Nullable Consumer<? super Audience> otherwise) {
return audience -> {
if (filter.test(audience)) {
this.accept(audience);
} else if (failureMessage != null) {
audience.sendMessage(failureMessage);
} else if (otherwise != null) {
otherwise.accept(audience);
}
};
}
Expand All @@ -141,12 +141,12 @@ public interface ClickCallback<T extends Audience> {
* <p>For audiences without permissions information, this test will always fail.</p>
*
* @param permission the permission to check
* @param failureMessage a message to send if the conditions are not met
* @param otherwise the action to perform on the audience if the conditions are not met
* @return a modified callback
* @since 4.13.0
*/
default @NotNull ClickCallback<T> requiringPermission(final @NotNull String permission, final @Nullable Component failureMessage) {
return this.filter(audience -> audience.getOrDefault(PermissionChecker.POINTER, ClickCallbackInternals.ALWAYS_FALSE).test(permission), failureMessage);
default @NotNull ClickCallback<T> requiringPermission(final @NotNull String permission, final @Nullable Consumer<? super Audience> otherwise) {
return this.filter(audience -> audience.getOrDefault(PermissionChecker.POINTER, ClickCallbackInternals.ALWAYS_FALSE).test(permission), otherwise);
}

/**
Expand Down

0 comments on commit 2fa6d30

Please sign in to comment.