1
0
mirror of https://github.com/GeyserMC/Floodgate.git synced 2026-01-04 15:31:48 +00:00

ProfileAudienceParser now respects the given player type

This commit is contained in:
Tim203
2022-03-09 11:24:21 +01:00
parent 0107d2d623
commit 4f9ce6f770
4 changed files with 25 additions and 13 deletions

View File

@@ -100,8 +100,6 @@ public class FloodgatePlatform {
InstanceHolder.set(api, link, this.injector, packetHandlers, handshakeHandlers, KEY);
// todo this was the place where we provided the build number and branch for Geyser dump
guice.getInstance(NewsChecker.class).start();
}

View File

@@ -44,10 +44,10 @@ import org.geysermc.floodgate.config.ProxyFloodgateConfig;
import org.geysermc.floodgate.platform.command.CommandUtil;
import org.geysermc.floodgate.platform.command.FloodgateCommand;
import org.geysermc.floodgate.platform.command.TranslatableMessage;
import org.geysermc.floodgate.platform.util.PlatformUtils.PlayerType;
import org.geysermc.floodgate.player.UserAudience;
import org.geysermc.floodgate.player.audience.ProfileAudience;
import org.geysermc.floodgate.player.audience.ProfileAudienceArgument;
import org.geysermc.floodgate.player.audience.ProfileAudienceArgument.PlayerType;
import org.geysermc.floodgate.util.Constants;
import org.geysermc.floodgate.util.HttpUtils;

View File

@@ -25,6 +25,9 @@
package org.geysermc.floodgate.platform.command;
import static org.geysermc.floodgate.platform.util.PlatformUtils.PlayerType.ALL_PLAYERS;
import static org.geysermc.floodgate.platform.util.PlatformUtils.PlayerType.ONLY_BEDROCK;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -35,9 +38,9 @@ import lombok.RequiredArgsConstructor;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.geysermc.floodgate.api.FloodgateApi;
import org.geysermc.floodgate.platform.util.PlatformUtils.PlayerType;
import org.geysermc.floodgate.player.UserAudience;
import org.geysermc.floodgate.player.audience.ProfileAudience;
import org.geysermc.floodgate.player.audience.ProfileAudienceArgument.PlayerType;
import org.geysermc.floodgate.util.LanguageManager;
import org.geysermc.floodgate.util.Utils;
@@ -116,8 +119,25 @@ public abstract class CommandUtil {
*/
public abstract Object getPlayerByUuid(@NonNull UUID uuid);
public Object getPlayerByUuid(@NonNull UUID uuid, PlayerType limitTo) {
return applyPlayerTypeFilter(getPlayerByUuid(uuid), limitTo, uuid);
}
public abstract Object getPlayerByUsername(@NonNull String username);
public Object getPlayerByUsername(@NonNull String username, PlayerType limitTo) {
return applyPlayerTypeFilter(getPlayerByUsername(username), limitTo, username);
}
protected Object applyPlayerTypeFilter(Object player, PlayerType filter, Object fallback) {
if (filter == ALL_PLAYERS || player instanceof String || player instanceof UUID) {
return player;
}
return (filter == ONLY_BEDROCK) == api.isFloodgatePlayer(getUuidFromSource(player))
? player
: fallback;
}
/**
* Checks if the given player has the given permission.
*

View File

@@ -37,6 +37,7 @@ import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.floodgate.platform.command.CommandUtil;
import org.geysermc.floodgate.platform.util.PlatformUtils.PlayerType;
import org.geysermc.floodgate.player.UserAudience;
public class ProfileAudienceArgument extends CommandArgument<UserAudience, ProfileAudience> {
@@ -76,12 +77,6 @@ public class ProfileAudienceArgument extends CommandArgument<UserAudience, Profi
return of(name, false, allowOffline, PlayerType.ALL_PLAYERS);
}
public enum PlayerType {
ALL_PLAYERS,
ONLY_BEDROCK,
ONLY_JAVA
}
@RequiredArgsConstructor
public static final class ProfileAudienceParser
implements ArgumentParser<UserAudience, ProfileAudience> {
@@ -94,7 +89,6 @@ public class ProfileAudienceArgument extends CommandArgument<UserAudience, Profi
public @NonNull ArgumentParseResult<ProfileAudience> parse(
@NonNull CommandContext<@NonNull UserAudience> commandContext,
@NonNull Queue<@NonNull String> inputQueue) {
//todo we don't use the limitTo in the getProfile methods
CommandUtil commandUtil = commandContext.get("CommandUtil");
String input = inputQueue.poll();
@@ -148,7 +142,7 @@ public class ProfileAudienceArgument extends CommandArgument<UserAudience, Profi
try {
// We only want to make sure the UUID is valid here.
Object player = commandUtil.getPlayerByUuid(UUID.fromString(input));
Object player = commandUtil.getPlayerByUuid(UUID.fromString(input), limitTo);
profileAudience = commandUtil.getProfileAudience(player, allowOffline);
} catch (final IllegalArgumentException ignored) {
return ArgumentParseResult.failure(
@@ -156,7 +150,7 @@ public class ProfileAudienceArgument extends CommandArgument<UserAudience, Profi
}
} else {
// This is a username.
Object player = commandUtil.getPlayerByUsername(input);
Object player = commandUtil.getPlayerByUsername(input, limitTo);
profileAudience = commandUtil.getProfileAudience(player, allowOffline);
}