mirror of
https://github.com/GeyserMC/Floodgate.git
synced 2025-12-19 14:59:20 +00:00
No longer use Adventure internally. Started working on adding Checkstyle
This commit is contained in:
@@ -7,10 +7,7 @@ dependencies {
|
||||
|
||||
// hack to make pre 1.12 work
|
||||
implementation("com.google.guava", "guava", guavaVersion)
|
||||
|
||||
implementation("cloud.commandframework", "cloud-bukkit", Versions.cloudVersion)
|
||||
implementation("net.kyori", "adventure-text-serializer-legacy", Versions.adventureApiVersion)
|
||||
implementation("net.kyori", "adventure-text-serializer-gson", Versions.adventureApiVersion)
|
||||
}
|
||||
|
||||
relocate("com.google.inject")
|
||||
|
||||
@@ -35,9 +35,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.geysermc.floodgate.api.SimpleFloodgateApi;
|
||||
import org.geysermc.floodgate.api.logger.FloodgateLogger;
|
||||
import org.geysermc.floodgate.api.player.FloodgatePlayer;
|
||||
import org.geysermc.floodgate.player.FloodgatePlayerImpl;
|
||||
import org.geysermc.floodgate.util.LanguageManager;
|
||||
import org.geysermc.floodgate.util.SpigotCommandUtil;
|
||||
|
||||
public final class SpigotListener implements Listener {
|
||||
@Inject private SimpleFloodgateApi api;
|
||||
@@ -68,7 +66,5 @@ public final class SpigotListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
api.playerRemoved(event.getPlayer().getUniqueId());
|
||||
|
||||
SpigotCommandUtil.AUDIENCE_CACHE.remove(event.getPlayer().getUniqueId()); //todo
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public final class SpigotCommandModule extends CommandModule {
|
||||
CommandManager<UserAudience> commandManager = new BukkitCommandManager<>(
|
||||
plugin,
|
||||
CommandExecutionCoordinator.simpleCoordinator(),
|
||||
commandUtil::getAudience,
|
||||
commandUtil::getUserAudience,
|
||||
audience -> (CommandSender) audience.source()
|
||||
);
|
||||
commandManager.registerCommandPreProcessor(new FloodgateCommandPreprocessor<>(commandUtil));
|
||||
|
||||
@@ -76,10 +76,9 @@ public final class SpigotPlatformModule extends AbstractModule {
|
||||
public CommandUtil commandUtil(
|
||||
FloodgateApi api,
|
||||
SpigotVersionSpecificMethods versionSpecificMethods,
|
||||
FloodgateLogger logger,
|
||||
LanguageManager languageManager) {
|
||||
return new SpigotCommandUtil(plugin.getServer(), api, versionSpecificMethods, plugin,
|
||||
logger, languageManager);
|
||||
return new SpigotCommandUtil(
|
||||
languageManager, plugin.getServer(), api, versionSpecificMethods, plugin);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
||||
@@ -25,44 +25,40 @@
|
||||
|
||||
package org.geysermc.floodgate.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
import org.geysermc.floodgate.api.logger.FloodgateLogger;
|
||||
import org.geysermc.floodgate.platform.command.CommandUtil;
|
||||
import org.geysermc.floodgate.platform.command.TranslatableMessage;
|
||||
import org.geysermc.floodgate.player.UserAudience;
|
||||
import org.geysermc.floodgate.player.UserAudienceArgument.PlayerType;
|
||||
import org.geysermc.floodgate.util.SpigotUserAudience.SpigotConsoleAudience;
|
||||
import org.geysermc.floodgate.util.SpigotUserAudience.SpigotPlayerAudience;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public final class SpigotCommandUtil implements CommandUtil {
|
||||
public static final @NonNull Map<UUID, UserAudience> AUDIENCE_CACHE = new HashMap<>();
|
||||
private static UserAudience console;
|
||||
import org.geysermc.floodgate.player.UserAudience.ConsoleAudience;
|
||||
import org.geysermc.floodgate.player.UserAudience.PlayerAudience;
|
||||
|
||||
public final class SpigotCommandUtil extends CommandUtil {
|
||||
private final Server server;
|
||||
private final FloodgateApi api;
|
||||
private final SpigotVersionSpecificMethods versionSpecificMethods;
|
||||
|
||||
private final JavaPlugin plugin;
|
||||
private final FloodgateLogger logger;
|
||||
private final LanguageManager manager;
|
||||
private UserAudience console;
|
||||
|
||||
public SpigotCommandUtil(
|
||||
LanguageManager manager,
|
||||
Server server,
|
||||
FloodgateApi api,
|
||||
SpigotVersionSpecificMethods versionSpecificMethods,
|
||||
JavaPlugin plugin) {
|
||||
super(manager, api);
|
||||
this.server = server;
|
||||
this.versionSpecificMethods = versionSpecificMethods;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull UserAudience getAudience(final @NonNull Object sourceObj) {
|
||||
public @NonNull UserAudience getUserAudience(final @NonNull Object sourceObj) {
|
||||
if (!(sourceObj instanceof CommandSender)) {
|
||||
throw new IllegalArgumentException("Source has to be a CommandSender!");
|
||||
}
|
||||
@@ -72,89 +68,47 @@ public final class SpigotCommandUtil implements CommandUtil {
|
||||
if (console != null) {
|
||||
return console;
|
||||
}
|
||||
return console = new SpigotConsoleAudience(source, this);
|
||||
return console = new ConsoleAudience(source, this);
|
||||
}
|
||||
|
||||
Player player = (Player) source;
|
||||
UUID uuid = player.getUniqueId();
|
||||
String username = player.getName();
|
||||
String locale = versionSpecificMethods.getLocale(player);
|
||||
|
||||
return AUDIENCE_CACHE.computeIfAbsent(uuid,
|
||||
$ -> new SpigotPlayerAudience(uuid, locale, source, true, this));
|
||||
return new PlayerAudience(uuid, username, locale, source,this, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable UserAudience getAudienceByUsername(@NonNull String username) {
|
||||
Player player = server.getPlayer(username);
|
||||
return player != null ? getAudience(player) : null;
|
||||
protected String getUsernameFromSource(@NonNull Object source) {
|
||||
return ((Player) source).getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull UserAudience getOfflineAudienceByUsername(@NonNull String username) {
|
||||
return new SpigotPlayerAudience(null, username, null, null, false, this);
|
||||
protected UUID getUuidFromSource(@NonNull Object source) {
|
||||
return ((Player) source).getUniqueId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable UserAudience getAudienceByUuid(@NonNull UUID uuid) {
|
||||
protected Collection<?> getOnlinePlayers() {
|
||||
return server.getOnlinePlayers();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getPlayerByUuid(@NonNull UUID uuid) {
|
||||
Player player = server.getPlayer(uuid);
|
||||
return player != null ? getAudience(player) : null;
|
||||
return player != null ? player : uuid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull UserAudience getOfflineAudienceByUuid(@NonNull UUID uuid) {
|
||||
return new SpigotPlayerAudience(uuid, null, null, null, false, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Collection<String> getOnlineUsernames(@NonNull PlayerType limitTo) {
|
||||
Collection<? extends Player> players = server.getOnlinePlayers();
|
||||
|
||||
Collection<String> usernames = new ArrayList<>();
|
||||
switch (limitTo) {
|
||||
case ALL_PLAYERS:
|
||||
for (Player player : players) {
|
||||
usernames.add(player.getName());
|
||||
}
|
||||
break;
|
||||
case ONLY_JAVA:
|
||||
for (Player player : players) {
|
||||
if (!api.isFloodgatePlayer(player.getUniqueId())) {
|
||||
usernames.add(player.getName());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ONLY_BEDROCK:
|
||||
for (Player player : players) {
|
||||
if (api.isFloodgatePlayer(player.getUniqueId())) {
|
||||
usernames.add(player.getName());
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unknown PlayerType");
|
||||
}
|
||||
return usernames;
|
||||
public Object getPlayerByUsername(@NonNull String username) {
|
||||
Player player = server.getPlayer(username);
|
||||
return player != null ? player : username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(Object player, String permission) {
|
||||
return cast(player).hasPermission(permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Object> getOnlinePlayersWithPermission(String permission) {
|
||||
List<Object> players = new ArrayList<>();
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
if (hasPermission(player, permission)) {
|
||||
players.add(player);
|
||||
}
|
||||
}
|
||||
return players;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(Object target, String locale, TranslatableMessage message, Object... args) {
|
||||
sendMessage(target, translateAndTransform(locale, message, args));
|
||||
return ((CommandSender) player).hasPermission(permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -163,10 +117,11 @@ public final class SpigotCommandUtil implements CommandUtil {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void kickPlayer(Object player, String locale, TranslatableMessage message, Object... args) {
|
||||
// Have to run this in the main thread so we don't get a `Asynchronous player kick!` error
|
||||
Bukkit.getScheduler().runTask(plugin,
|
||||
() -> cast(player).kickPlayer(translateAndTransform(locale, message, args)));
|
||||
public void kickPlayer(Object player, String message) {
|
||||
// can also be console
|
||||
if (player instanceof Player) {
|
||||
Bukkit.getScheduler().runTask(plugin, () -> ((Player) player).kickPlayer(message));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -178,18 +133,4 @@ public final class SpigotCommandUtil implements CommandUtil {
|
||||
public boolean removePlayerFromWhitelist(UUID uuid, String username) {
|
||||
return WhitelistUtils.removePlayer(uuid, username);
|
||||
}
|
||||
|
||||
public String translateAndTransform(String locale, TranslatableMessage message, Object... args) {
|
||||
// unlike others, Bukkit doesn't have to transform a message into another class.
|
||||
return message.translateMessage(manager, locale, args);
|
||||
}
|
||||
|
||||
private Player cast(Object instance) {
|
||||
try {
|
||||
return (Player) instance;
|
||||
} catch (ClassCastException exception) {
|
||||
logger.error("Failed to cast {} to Player", instance.getClass().getName());
|
||||
throw exception;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,158 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* @author GeyserMC
|
||||
* @link https://github.com/GeyserMC/Floodgate
|
||||
*/
|
||||
|
||||
package org.geysermc.floodgate.util;
|
||||
|
||||
import java.util.UUID;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.audience.ForwardingAudience;
|
||||
import net.kyori.adventure.audience.MessageType;
|
||||
import net.kyori.adventure.identity.Identity;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.geysermc.floodgate.platform.command.CommandUtil;
|
||||
import org.geysermc.floodgate.platform.command.TranslatableMessage;
|
||||
import org.geysermc.floodgate.player.UserAudience;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class SpigotUserAudience implements UserAudience, ForwardingAudience.Single {
|
||||
private final UUID uuid;
|
||||
private final String locale;
|
||||
private final CommandSender source;
|
||||
private final CommandUtil commandUtil;
|
||||
|
||||
@Override
|
||||
public @NonNull UUID uuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull String username() {
|
||||
return source.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull String locale() {
|
||||
return locale;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull CommandSender source() {
|
||||
return source;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(@NonNull String permission) {
|
||||
return source.hasPermission(permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(
|
||||
@NonNull Identity source,
|
||||
@NonNull Component message,
|
||||
@NonNull MessageType type) {
|
||||
this.source.sendMessage(GsonComponentSerializer.gson().serialize(message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(TranslatableMessage message, Object... args) {
|
||||
commandUtil.sendMessage(source(), locale(), message, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnect(@NonNull Component reason) {
|
||||
if (source instanceof Player) {
|
||||
((Player) source).kickPlayer(GsonComponentSerializer.gson().serialize(reason));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disconnect(TranslatableMessage message, Object... args) {
|
||||
commandUtil.kickPlayer(source(), locale(), message, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Audience audience() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public static final class SpigotConsoleAudience extends SpigotUserAudience
|
||||
implements ConsoleAudience {
|
||||
public SpigotConsoleAudience(CommandSender source, CommandUtil commandUtil) {
|
||||
super(new UUID(0, 0), "en_us", source, commandUtil);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(
|
||||
@NonNull Identity source,
|
||||
@NonNull Component message,
|
||||
@NonNull MessageType type) {
|
||||
source().sendMessage(LegacyComponentSerializer.legacySection().serialize(message));
|
||||
}
|
||||
}
|
||||
|
||||
public static final class SpigotPlayerAudience extends SpigotUserAudience
|
||||
implements PlayerAudience {
|
||||
|
||||
private final String username;
|
||||
private final boolean online;
|
||||
|
||||
public SpigotPlayerAudience(
|
||||
UUID uuid,
|
||||
String username,
|
||||
String locale,
|
||||
CommandSender source,
|
||||
boolean online,
|
||||
CommandUtil commandUtil) {
|
||||
super(uuid, locale, source, commandUtil);
|
||||
this.username = username;
|
||||
this.online = online;
|
||||
}
|
||||
|
||||
public SpigotPlayerAudience(
|
||||
UUID uuid,
|
||||
String locale,
|
||||
CommandSender source,
|
||||
boolean online,
|
||||
CommandUtil commandUtil) {
|
||||
this(uuid, source.getName(), locale, source, online, commandUtil);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull String username() {
|
||||
return username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean online() {
|
||||
return online;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user