Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 22 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<name>AuthMeReReloaded</name>
<description>Fork of the first authentication plugin for the Bukkit API!</description>
<inceptionYear>2013</inceptionYear>
<!-- Fork: build uses only local src/main/resources — Maven repos do not overwrite messages YAML -->
<url>https://github.com/AuthMe/AuthMeReloaded</url>

<organization>
Expand All @@ -26,7 +27,7 @@

<ciManagement>
<system>jenkins</system>
<url>https://ci.codemc.io/job/AuthMe/job/AuthMeReloaded/</url>
<url>https://ci.codemc.io/job/AuthMe/job/AuthMeReReloaded/</url>
</ciManagement>

<issueManagement>
Expand Down Expand Up @@ -60,10 +61,10 @@
<!-- Environment properties -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.source>17</java.source>
<java.target>17</java.target>
<java.apiVersion>17</java.apiVersion>
<java.compiler.minimumVersion>17</java.compiler.minimumVersion>
<java.source>21</java.source>
<java.target>21</java.target>
<java.apiVersion>21</java.apiVersion>
<java.compiler.minimumVersion>21</java.compiler.minimumVersion>
<maven.minimumVersion>3.8.8</maven.minimumVersion>

<!-- Versioning properties -->
Expand Down Expand Up @@ -96,7 +97,7 @@
<dependencies.googleauth.version>1.5.0</dependencies.googleauth.version>
<dependencies.configme.version>1.3.1</dependencies.configme.version>
<!-- Spigot -->
<dependencies.spigot.version>1.21.1-R0.1-SNAPSHOT</dependencies.spigot.version>
<dependencies.spigot.version>1.21.11-R0.1-SNAPSHOT</dependencies.spigot.version>
<dependencies.log4j-core.version>2.20.0</dependencies.log4j-core.version> <!-- TODO: check this, version bundled 1.16.5 -->
<!-- Spigot libraries -->
<dependencies.bstats.version>3.0.2</dependencies.bstats.version>
Expand Down Expand Up @@ -451,6 +452,12 @@
</snapshots>
</repository>

<!-- Paper API (AsyncPlayerSpawnLocationEvent, etc.) -->
<repository>
<id>papermc</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>

<!-- CodeMC Repo (Contains many required libraries) -->
<repository>
<id>codemc-repo</id>
Expand Down Expand Up @@ -737,6 +744,15 @@
</exclusion>
</exclusions>
</dependency>

<!-- Paper API (compile-only; AsyncPlayerSpawnLocationEvent for Paper 1.21.9+) -->
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>${dependencies.spigot.version}</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
Expand Down
7 changes: 5 additions & 2 deletions src/main/java/fr/xephi/authme/AuthMe.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import fr.xephi.authme.listener.PlayerListener111;
import fr.xephi.authme.listener.PlayerListener19;
import fr.xephi.authme.listener.PlayerListener19Spigot;
import fr.xephi.authme.listener.PlayerListenerPaperAsyncSpawn;
import fr.xephi.authme.listener.PlayerListenerHigherThan18;
import fr.xephi.authme.listener.PurgeListener;
import fr.xephi.authme.listener.ServerListener;
Expand Down Expand Up @@ -335,8 +336,10 @@ void registerEventListeners(Injector injector) {
// pluginManager.registerEvents(injector.getSingleton(PlayerListener19.class), this);
// }

// Try to register 1.9 spigot player listeners
if (isClassLoaded("org.spigotmc.event.player.PlayerSpawnLocationEvent")) {
// Join spawn: Paper 1.21.9+ uses AsyncPlayerSpawnLocationEvent; Spigot event is deprecated there
if (isClassLoaded("io.papermc.paper.event.player.AsyncPlayerSpawnLocationEvent")) {
pluginManager.registerEvents(injector.getSingleton(PlayerListenerPaperAsyncSpawn.class), this);
} else if (isClassLoaded("org.spigotmc.event.player.PlayerSpawnLocationEvent")) {
pluginManager.registerEvents(injector.getSingleton(PlayerListener19Spigot.class), this);
}

Expand Down
19 changes: 8 additions & 11 deletions src/main/java/fr/xephi/authme/command/CommandHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import fr.xephi.authme.message.Messages;
import fr.xephi.authme.permission.PermissionsManager;
import fr.xephi.authme.util.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;

import javax.inject.Inject;
Expand Down Expand Up @@ -81,7 +80,7 @@ private void handleCommandResult(CommandSender sender, FoundCommandResult result
executeCommand(sender, result);
break;
case MISSING_BASE_COMMAND:
sender.sendMessage(ChatColor.DARK_RED + "Failed to parse " + AuthMe.getPluginName() + " command!");
messages.send(sender, MessageKey.COMMAND_PARSE_FAILED, AuthMe.getPluginName());
break;
case INCORRECT_ARGUMENTS:
sendImproperArgumentsMessage(sender, result);
Expand Down Expand Up @@ -145,17 +144,16 @@ private static List<String> skipEmptyArguments(String[] args) {
* @param sender The command sender
* @param result The command that was found during the mapping process
*/
private static void sendUnknownCommandMessage(CommandSender sender, FoundCommandResult result) {
sender.sendMessage(ChatColor.DARK_RED + "Unknown command!");
private void sendUnknownCommandMessage(CommandSender sender, FoundCommandResult result) {
messages.send(sender, MessageKey.UNKNOWN_AUTHME_COMMAND);

// Show a command suggestion if available and the difference isn't too big
if (result.getDifference() <= SUGGEST_COMMAND_THRESHOLD && result.getCommandDescription() != null) {
sender.sendMessage(ChatColor.YELLOW + "Did you mean " + ChatColor.GOLD
+ CommandUtils.constructCommandPath(result.getCommandDescription()) + ChatColor.YELLOW + "?");
messages.send(sender, MessageKey.COMMAND_SUGGEST_SIMILAR,
CommandUtils.constructCommandPath(result.getCommandDescription()));
}

sender.sendMessage(ChatColor.YELLOW + "Use the command " + ChatColor.GOLD + "/" + result.getLabels().get(0)
+ " help" + ChatColor.YELLOW + " to view help.");
messages.send(sender, MessageKey.COMMAND_USE_HELP, result.getLabels().get(0));
}

private void sendImproperArgumentsMessage(CommandSender sender, FoundCommandResult result) {
Expand All @@ -175,12 +173,11 @@ private void sendImproperArgumentsMessage(CommandSender sender, FoundCommandResu
}

private void showHelpForCommand(CommandSender sender, FoundCommandResult result) {
sender.sendMessage(ChatColor.DARK_RED + "Incorrect command arguments!");
messages.send(sender, MessageKey.INCORRECT_COMMAND_ARGUMENTS_GENERIC);
helpProvider.outputHelp(sender, result, HelpProvider.SHOW_ARGUMENTS);

List<String> labels = result.getLabels();
String childLabel = labels.size() >= 2 ? labels.get(1) : "";
sender.sendMessage(ChatColor.GOLD + "Detailed help: " + ChatColor.WHITE
+ "/" + labels.get(0) + " help " + childLabel);
messages.send(sender, MessageKey.COMMAND_DETAILED_HELP_SYNTAX, labels.get(0), childLabel);
}
}
10 changes: 8 additions & 2 deletions src/main/java/fr/xephi/authme/command/PlayerCommand.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,31 @@
package fr.xephi.authme.command;

import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.service.CommonService;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import javax.inject.Inject;
import java.util.List;

/**
* Common base type for player-only commands, handling the verification that the command sender is indeed a player.
*/
public abstract class PlayerCommand implements ExecutableCommand {

@Inject
protected CommonService commonService;

@Override
public void executeCommand(CommandSender sender, List<String> arguments) {
if (sender instanceof Player) {
runCommand((Player) sender, arguments);
} else {
String alternative = getAlternativeCommand();
if (alternative != null) {
sender.sendMessage("Player only! Please use " + alternative + " instead.");
commonService.send(sender, MessageKey.PLAYER_ONLY_ALTERNATIVE, alternative);
} else {
sender.sendMessage("This command is only for players.");
commonService.send(sender, MessageKey.PLAYER_ONLY);
}
}
}
Expand Down
20 changes: 15 additions & 5 deletions src/main/java/fr/xephi/authme/command/executable/HelpCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@
import fr.xephi.authme.command.ExecutableCommand;
import fr.xephi.authme.command.FoundCommandResult;
import fr.xephi.authme.command.FoundResultStatus;
import fr.xephi.authme.command.help.HelpMessage;
import fr.xephi.authme.command.help.HelpMessagesService;
import fr.xephi.authme.command.help.HelpProvider;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;

import javax.inject.Inject;
import java.util.List;

import static org.bukkit.ChatColor.translateAlternateColorCodes;

import static fr.xephi.authme.command.FoundResultStatus.MISSING_BASE_COMMAND;
import static fr.xephi.authme.command.FoundResultStatus.UNKNOWN_LABEL;
import static fr.xephi.authme.command.help.HelpProvider.ALL_OPTIONS;
Expand All @@ -31,6 +34,9 @@ public class HelpCommand implements ExecutableCommand {
@Inject
private HelpProvider helpProvider;

@Inject
private HelpMessagesService helpMessagesService;


// Convention: arguments is not the actual invoked arguments but the command that was invoked,
// e.g. "/authme help register" would typically be arguments = [register], but here we pass [authme, register]
Expand All @@ -40,15 +46,19 @@ public void executeCommand(CommandSender sender, List<String> arguments) {

FoundResultStatus resultStatus = result.getResultStatus();
if (MISSING_BASE_COMMAND.equals(resultStatus)) {
sender.sendMessage(ChatColor.DARK_RED + "Could not get base command");
sender.sendMessage(translateAlternateColorCodes('&',
helpMessagesService.getMessage(HelpMessage.HELP_MISSING_BASE_COMMAND)));
return;
} else if (UNKNOWN_LABEL.equals(resultStatus)) {
if (result.getCommandDescription() == null) {
sender.sendMessage(ChatColor.DARK_RED + "Unknown command");
sender.sendMessage(translateAlternateColorCodes('&',
helpMessagesService.getMessage(HelpMessage.HELP_UNKNOWN_COMMAND)));
return;
} else {
sender.sendMessage(ChatColor.GOLD + "Assuming " + ChatColor.WHITE
+ CommandUtils.constructCommandPath(result.getCommandDescription()));
String path = CommandUtils.constructCommandPath(result.getCommandDescription());
String message = helpMessagesService.getMessage(HelpMessage.HELP_ASSUMING_COMMAND)
.replace("%command%", path);
sender.sendMessage(translateAlternateColorCodes('&', message));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ public void executeCommand(final CommandSender sender, List<String> arguments) {
bukkitService.runTaskAsynchronously(() -> {
List<String> accountList = dataSource.getAllAuthsByIp(playerName);
if (accountList.isEmpty()) {
sender.sendMessage("[AuthMe] This IP does not exist in the database.");
commonService.send(sender, MessageKey.ADMIN_ACCOUNTS_IP_UNKNOWN);
} else if (accountList.size() == 1) {
sender.sendMessage("[AuthMe] " + playerName + " is a single account player");
commonService.send(sender, MessageKey.ADMIN_ACCOUNTS_SINGLE, playerName);
} else {
outputAccountsList(sender, playerName, accountList);
}
Expand All @@ -50,25 +50,25 @@ public void executeCommand(final CommandSender sender, List<String> arguments) {
commonService.send(sender, MessageKey.UNKNOWN_USER);
return;
} else if (auth.getLastIp() == null) {
sender.sendMessage("No known last IP address for player");
commonService.send(sender, MessageKey.ADMIN_ACCOUNTS_NO_LAST_IP);
return;
}

List<String> accountList = dataSource.getAllAuthsByIp(auth.getLastIp());
if (accountList.isEmpty()) {
commonService.send(sender, MessageKey.UNKNOWN_USER);
} else if (accountList.size() == 1) {
sender.sendMessage("[AuthMe] " + playerName + " is a single account player");
commonService.send(sender, MessageKey.ADMIN_ACCOUNTS_SINGLE, playerName);
} else {
outputAccountsList(sender, playerName, accountList);
}
});
}
}

private static void outputAccountsList(CommandSender sender, String playerName, List<String> accountList) {
sender.sendMessage("[AuthMe] " + playerName + " has " + accountList.size() + " accounts.");
String message = "[AuthMe] " + String.join(", ", accountList) + ".";
sender.sendMessage(message);
private void outputAccountsList(CommandSender sender, String playerName, List<String> accountList) {
commonService.send(sender, MessageKey.ADMIN_ACCOUNTS_MULTIPLE, playerName,
String.valueOf(accountList.size()));
commonService.send(sender, MessageKey.ADMIN_ACCOUNTS_LIST, String.join(", ", accountList));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,28 @@

import fr.xephi.authme.AuthMe;
import fr.xephi.authme.command.ExecutableCommand;
import org.bukkit.ChatColor;
import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.message.Messages;
import org.bukkit.command.CommandSender;

import javax.inject.Inject;
import java.util.List;

/**
* AuthMe base command; shows the version and some command pointers.
*/
public class AuthMeCommand implements ExecutableCommand {

@Inject
private Messages messages;

@Override
public void executeCommand(CommandSender sender, List<String> arguments) {
sender.sendMessage(ChatColor.GREEN + "This server is running " + AuthMe.getPluginName() + " v"
+ AuthMe.getPluginVersion() + " b" + AuthMe.getPluginBuildNumber()+ "! " + ChatColor.RED + "<3");
sender.sendMessage(ChatColor.YELLOW + "Use the command " + ChatColor.GOLD + "/authme help" + ChatColor.YELLOW
+ " to view help.");
sender.sendMessage(ChatColor.YELLOW + "Use the command " + ChatColor.GOLD + "/authme about" + ChatColor.YELLOW
+ " to view about.");
messages.send(sender, MessageKey.AUTHME_INFO_RUNNING,
AuthMe.getPluginName(),
AuthMe.getPluginVersion(),
String.valueOf(AuthMe.getPluginBuildNumber()));
messages.send(sender, MessageKey.AUTHME_INFO_HELP);
messages.send(sender, MessageKey.AUTHME_INFO_ABOUT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ public class ConverterCommand implements ExecutableCommand {
public void executeCommand(CommandSender sender, List<String> arguments) {
Class<? extends Converter> converterClass = getConverterClassFromArgs(arguments);
if (converterClass == null) {
sender.sendMessage("Converters: " + String.join(", ", CONVERTERS.keySet()));
commonService.send(sender, MessageKey.ADMIN_CONVERTER_LIST,
String.join(", ", CONVERTERS.keySet()));
return;
}

Expand All @@ -66,7 +67,7 @@ public void executeCommand(CommandSender sender, List<String> arguments) {
});

// Show a status message
sender.sendMessage("[AuthMe] Successfully started " + arguments.get(0));
commonService.send(sender, MessageKey.ADMIN_CONVERTER_STARTED, arguments.get(0));
}

private static Class<? extends Converter> getConverterClassFromArgs(List<String> arguments) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.xephi.authme.command.executable.authme;

import fr.xephi.authme.command.PlayerCommand;
import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.SpawnLoader;
Expand All @@ -23,7 +24,7 @@ public class FirstSpawnCommand extends PlayerCommand {
@Override
public void runCommand(Player player, List<String> arguments) {
if (spawnLoader.getFirstSpawn() == null) {
player.sendMessage("[AuthMe] First spawn has failed, please try to define the first spawn");
commonService.send(player, MessageKey.ADMIN_FIRST_SPAWN_FAILED);
} else {
//String name= player.getName();
bukkitService.runTaskIfFolia(player, () -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import fr.xephi.authme.command.ExecutableCommand;
import fr.xephi.authme.permission.PermissionsManager;
import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.process.Management;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.CommonService;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

Expand All @@ -26,19 +28,22 @@ public class ForceLoginCommand implements ExecutableCommand {
@Inject
private BukkitService bukkitService;

@Inject
private CommonService commonService;

@Override
public void executeCommand(CommandSender sender, List<String> arguments) {
// Get the player query
String playerName = arguments.isEmpty() ? sender.getName() : arguments.get(0);

Player player = bukkitService.getPlayerExact(playerName);
if (player == null || !player.isOnline()) {
sender.sendMessage("Player needs to be online!");
commonService.send(sender, MessageKey.ADMIN_FORCE_LOGIN_OFFLINE);
} else if (!permissionsManager.hasPermission(player, CAN_LOGIN_BE_FORCED)) {
sender.sendMessage("You cannot force login the player " + playerName + "!");
commonService.send(sender, MessageKey.ADMIN_FORCE_LOGIN_DENIED, playerName);
} else {
management.forceLogin(player);
sender.sendMessage("Force login for " + playerName + " performed!");
commonService.send(sender, MessageKey.ADMIN_FORCE_LOGIN_SUCCESS, playerName);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public void executeCommand(CommandSender sender, List<String> arguments) {

DataSourceValue<String> email = dataSource.getEmail(playerName);
if (email.rowExists()) {
sender.sendMessage("[AuthMe] " + playerName + "'s email: " + email.getValue());
commonService.send(sender, MessageKey.ADMIN_GET_EMAIL, playerName, email.getValue());
} else {
commonService.send(sender, MessageKey.UNKNOWN_USER);
}
Expand Down
Loading