Skip to content

Commit

Permalink
Use generic sender type requirement
Browse files Browse the repository at this point in the history
  • Loading branch information
jpenilla committed Feb 4, 2024
1 parent 87ac77e commit b940a29
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 21 deletions.
3 changes: 3 additions & 0 deletions common/src/main/java/xyz/jpenilla/tabtps/common/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
*/
package xyz.jpenilla.tabtps.common;

import io.leangen.geantyref.TypeToken;
import java.util.List;
import java.util.UUID;
import net.kyori.adventure.text.Component;
Expand All @@ -36,6 +37,8 @@

@DefaultQualifier(NonNull.class)
public interface User<P> extends Commander {
TypeToken<User<?>> TYPE = new TypeToken<User<?>>() {};

UUID uuid();

Component displayName();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
*/
package xyz.jpenilla.tabtps.common.command;

import io.leangen.geantyref.GenericTypeReflector;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
Expand Down Expand Up @@ -139,7 +140,7 @@ private void argumentParsing(final @NonNull ExceptionContext<Commander, Argument
private void invalidSender(final @NonNull ExceptionContext<Commander, InvalidCommandSenderException> ctx) {
final Component message = Messages.COMMAND_EXCEPTION_INVALID_SENDER_TYPE.styled(
RED,
text(ctx.exception().requiredSender().getSimpleName())
text(GenericTypeReflector.erase(ctx.exception().requiredSender()).getSimpleName())
);
decorateAndSend(ctx.context().sender(), message);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import org.checkerframework.checker.nullness.qual.NonNull;
import org.incendo.cloud.Command;
import org.incendo.cloud.context.CommandContext;
import org.incendo.cloud.execution.CommandExecutionHandler;
import org.incendo.cloud.permission.PredicatePermission;
import xyz.jpenilla.tabtps.common.Messages;
import xyz.jpenilla.tabtps.common.TabTPS;
Expand Down Expand Up @@ -59,33 +58,25 @@ public void register() {
final Command.Builder<Commander> toggle = this.commands.rootBuilder().literal("toggle");

this.commands.register(toggle.literal("tab")
.senderType(User.class)
.permission(PredicatePermission.of(commander -> this.togglePermission(commander, DisplayConfig::tabSettings)))
.senderType(User.TYPE)
.permission(PredicatePermission.of(user -> this.togglePermission(user, DisplayConfig::tabSettings)))
.commandDescription(richDescription(Messages.COMMAND_TOGGLE_TAB_DESCRIPTION.plain()))
.handler(wrap(this::toggleTab)));
.handler(this::toggleTab));

this.commands.register(toggle.literal("actionbar")
.senderType(User.class)
.permission(PredicatePermission.of(commander -> this.togglePermission(commander, DisplayConfig::actionBarSettings)))
.senderType(User.TYPE)
.permission(PredicatePermission.of(user -> this.togglePermission(user, DisplayConfig::actionBarSettings)))
.commandDescription(richDescription(Messages.COMMAND_TOGGLE_ACTIONBAR_DESCRIPTION.plain()))
.handler(wrap(this::toggleActionBar)));
.handler(this::toggleActionBar));

this.commands.register(toggle.literal("bossbar")
.senderType(User.class)
.permission(PredicatePermission.of(commander -> this.togglePermission(commander, DisplayConfig::bossBarSettings)))
.senderType(User.TYPE)
.permission(PredicatePermission.of(user -> this.togglePermission(user, DisplayConfig::bossBarSettings)))
.commandDescription(richDescription(Messages.COMMAND_TOGGLE_BOSSBAR_DESCRIPTION.plain()))
.handler(wrap(this::toggleBossBar)));
.handler(this::toggleBossBar));
}

// todo
@SuppressWarnings({"unchecked", "rawtypes"})
private static CommandExecutionHandler<User> wrap(final CommandExecutionHandler<User<?>> handler) {
return (CommandExecutionHandler) handler;
}

private boolean togglePermission(final @NonNull Commander commander, final @NonNull Function<DisplayConfig, DisplayConfig.DisplaySettings> function) {
if (!(commander instanceof User)) return true; // todo ?
final User<?> user = (User<?>) commander;
private boolean togglePermission(final @NonNull User<?> user, final @NonNull Function<DisplayConfig, DisplayConfig.DisplaySettings> function) {
return this.tabTPS.findDisplayConfig(user)
.map(config -> function.apply(config).allow())
.orElse(false);
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ sponge-gradle = { id = "org.spongepowered.gradle.plugin", version = "2.2.0" }
adventure = "4.15.0"
adventurePagination = "4.0.0-SNAPSHOT"
adventurePlatform = "4.3.2"
cloud = "2.0.0-beta.1"
cloud = "2.0.0-SNAPSHOT"
cloudMinecraft = "2.0.0-beta.1"
cloudModded = "2.0.0-beta.1"
cloudSponge = "2.0.0-SNAPSHOT"
Expand Down

0 comments on commit b940a29

Please sign in to comment.