Compare commits

..

7 Commits

Author SHA1 Message Date
DGun Otto 3cffd16ff2 Merge pull request #123 from HaHaWTH/mp-1
Sync to multipaper
2024-04-14 19:39:17 +08:00
DGun Otto 3d1392f0e1 Merge branch 'multipaper' into mp-1 2024-04-14 19:39:03 +08:00
DGun Otto c2cd561e27 Merge pull request #119 from HaHaWTH/mp-pr
Sync changes to multipaper branch
2024-03-30 16:17:41 +08:00
DGun Otto 12880a5cfd Merge branch 'multipaper' into mp-pr 2024-03-30 16:16:58 +08:00
DGun Otto b5a8df2c4e [ci skip] Update README.md 2024-03-30 16:13:55 +08:00
DGun Otto a035ba0a4b Update README.md 2024-03-29 13:12:29 +08:00
HaHaWTH bf6de0e161 Multipaper support 2024-03-29 13:10:18 +08:00
15 changed files with 111 additions and 133 deletions
+6 -8
View File
@@ -10,11 +10,11 @@ jobs:
Build:
strategy:
matrix:
jdkversion: [ 21 ]
jdkversion: [ 17 ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: ${{ matrix.jdkversion }}
@@ -22,7 +22,7 @@ jobs:
- name: Build
run: mvn -V -B clean package --file pom.xml
- name: Upload Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3.1.2
with:
name: Download
path: ./target/AuthMe-5.6.0-FORK-Universal.jar
@@ -37,10 +37,8 @@ jobs:
javaVersion: '8'
- mcVersion: '1.12.2'
javaVersion: '8'
- mcVersion: '1.18.2'
javaVersion: '17'
- mcVersion: '1.20.4'
javaVersion: '21'
- mcVersion: '1.20.1'
javaVersion: '17'
steps:
- uses: HaHaWTH/minecraft-plugin-runtime-test@paper
with:
+1 -60
View File
@@ -1,60 +1 @@
# AuthMeReReloaded
**"A fork of the best authentication plugin for the Bukkit modding API!⭐"**
[English](https://github.com/HaHaWTH/AuthMeReReloaded) | [简体中文](https://github.com/HaHaWTH/AuthMeReReloaded/blob/master/README-zh.md)
![Graph](https://bstats.org/signatures/bukkit/AuthMeReloaded-Fork.svg)
<p align="center">
<img src="https://img.shields.io/github/languages/code-size/HaHaWTH/AuthMeReReloaded.svg" alt="Code size"/>
<img src="https://img.shields.io/github/repo-size/HaHaWTH/AuthMeReReloaded.svg" alt="GitHub repo size"/>
<img src="https://www.codefactor.io/repository/github/hahawth/authmerereloaded/badge" alt="CodeFactor" />
<img alt="GitHub Downloads (all assets, all releases)" src="https://img.shields.io/github/downloads/HaHaWTH/AuthMeReReloaded/total?logo=github&label=GitHub%20Downloads&color=black">
<img alt="Spiget Downloads" src="https://img.shields.io/spiget/downloads/114010?logo=spigotmc&label=SpigotMC%20Downloads&color=orange">
<img alt="Modrinth Downloads" src="https://img.shields.io/modrinth/dt/3IEZ9vol?logo=modrinth&label=Modrinth%20Downloads&color=light-green">
<img alt="Hangar Downloads" src="https://img.shields.io/hangar/dt/AuthMeReReloaded?logo=hangar&label=Hangar%20Downloads&color=white">
</p>
**Detailed Changes:**
1. Improved mail sending logic & support more emails
2. Shutdown mail sending(When server is closed, email you)
3. Legacy bug fixes
4. Anti Ghost Player(Doubled login bug)
5. Use the best performance method by server brand
6. Bedrock Compatibility(Floodgate needed)(based on UUID)
7. Update checker
8. Integrated GUI Captcha feature(Bedrock compatibility & ProtocolLib needed)(70% Asynchronous)
9. Improved listeners
10. Player login logic improvement to reduce lag
11. Automatically purge bot data
12. **Folia support (in active testing)**
13. Offhand Menu compatibility(Thats amazing)
14. **Velocity support (See [Velocity Support](./vc-support.md))**
15. Support Virtual Threads caching
16. Automatically fix portal stuck issue
17. Automatically login for Bedrock players(configurable)
18. Fix shulker box crash bug on legacy versions(MC 1.13-)
19. **H2 database support**
20. **100% compatibility with original authme and extensions**
21. More......
**Download links:**
[Releases](https://github.com/HaHaWTH/AuthMeReReloaded/releases/latest)
[Actions(Dev builds, use at your own risk!)](https://github.com/HaHaWTH/AuthMeReReloaded/actions/workflows/maven.yml)
If you are using FRP(内网穿透) for your server, this plugin may help [HAProxy-Detector](https://github.com/HaHaWTH/HAProxy-Detector)
**Pull Requests and suggestions are welcome!**
## License
Only additions to AuthMeReloaded is under AGPL-3.0 license, AuthMeReloaded is licensed under GPL-3.0.
<picture>
<source
media="(prefers-color-scheme: dark)"
srcset="
https://api.star-history.com/svg?repos=HaHaWTH/AuthMeReReloaded&type=Date&theme=dark
"
/>
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=HaHaWTH/AuthMeReReloaded&type=Date" />
</picture>
**This branch adds Multipaper support, requires Java17 or higher**
+80 -24
View File
@@ -67,7 +67,7 @@
<maven.minimumVersion>3.6.3</maven.minimumVersion>
<!-- Dependencies versions -->
<spigot.version>1.20.6-R0.1-SNAPSHOT</spigot.version>
<spigot.version>1.20.4-R0.1-SNAPSHOT</spigot.version>
<!-- Versioning properties -->
<project.outputName>AuthMe</project.outputName>
@@ -215,7 +215,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.1</version>
<version>3.3.0</version>
</plugin>
<!-- Generate a jar containing the source javadoc -->
<plugin>
@@ -256,7 +256,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.3</version>
<version>3.5.2</version>
<executions>
<execution>
<id>shaded-jar</id>
@@ -279,6 +279,10 @@
</excludes>
</artifactSet>
<relocations>
<relocation>
<pattern>org.h2</pattern>
<shadedPattern>fr.xephi.authme.libs.org.h2</shadedPattern>
</relocation>
<relocation>
<pattern>org.apache.http</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.http</shadedPattern>
@@ -287,10 +291,34 @@
<pattern>org.apache.commons</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.commons</shadedPattern>
</relocation>
<relocation>
<pattern>javax.activation</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.activation</shadedPattern>
</relocation>
<relocation>
<pattern>javax.annotation</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.annotation</shadedPattern>
</relocation>
<relocation>
<pattern>javax.mail</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.mail</shadedPattern>
</relocation>
<relocation>
<pattern>waffle</pattern>
<shadedPattern>fr.xephi.authme.libs.waffle</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.mail</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.mail</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.jna</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.jna</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.activation</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.activation</shadedPattern>
</relocation>
<relocation>
<pattern>com.github.benmanes.caffeine</pattern>
<shadedPattern>fr.xephi.authme.libs.com.github.benmanes.caffeine</shadedPattern>
@@ -337,6 +365,10 @@
<pattern>com.google.gson</pattern>
<shadedPattern>fr.xephi.authme.libs.com.google.gson</shadedPattern>
</relocation>
<relocation>
<pattern>org.h2</pattern>
<shadedPattern>fr.xephi.authme.libs.org.h2</shadedPattern>
</relocation>
<relocation>
<pattern>org.apache.http</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.http</shadedPattern>
@@ -345,14 +377,42 @@
<pattern>org.apache.commons</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.commons</shadedPattern>
</relocation>
<relocation>
<pattern>javax.activation</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.activation</shadedPattern>
</relocation>
<relocation>
<pattern>javax.annotation</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.annotation</shadedPattern>
</relocation>
<relocation>
<pattern>javax.mail</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.mail</shadedPattern>
</relocation>
<relocation>
<pattern>waffle</pattern>
<shadedPattern>fr.xephi.authme.libs.waffle</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.mail</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.mail</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.jna</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.jna</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.activation</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.activation</shadedPattern>
</relocation>
<relocation>
<pattern>com.github.benmanes.caffeine</pattern>
<shadedPattern>fr.xephi.authme.libs.com.github.benmanes.caffeine</shadedPattern>
</relocation>
<relocation>
<pattern>com.github.puregero.multilib</pattern>
<shadedPattern>fr.xephi.authme.libs.com.github.puregero.multilib</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
@@ -459,10 +519,6 @@
<pattern>org.apache.commons.validator</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.commons.validator</shadedPattern>
</relocation>
<relocation>
<pattern>com.alessiodp.libby</pattern>
<shadedPattern>fr.xephi.authme.libs.com.alessiodp.libby</shadedPattern>
</relocation>
</relocations>
<filters>
@@ -587,6 +643,12 @@
</snapshots>
</repository>
<!-- MultiLib -->
<repository>
<id>clojars</id>
<url>https://repo.clojars.org</url>
</repository>
<!-- ProtocolLib Repo -->
<repository>
<id>dmulloy2-repo-releases</id>
@@ -609,12 +671,6 @@
</snapshots>
</repository>
<!-- Maven Central Snapshots Repository -->
<repository>
<id>maven-snapshots</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
<!-- Multiverse Repo -->
<repository>
<id>onarandombox-repo-releases</id>
@@ -717,7 +773,7 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.6-SNAPSHOT</version>
<version>1.6.0</version>
<optional>true</optional>
</dependency>
@@ -729,14 +785,6 @@
<scope>provided</scope>
</dependency>
<!-- Libby -->
<dependency>
<groupId>com.alessiodp.libby</groupId>
<artifactId>libby-bukkit</artifactId>
<version>2.0.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- Database Connection Pool -->
<dependency>
<groupId>com.zaxxer</groupId>
@@ -1148,18 +1196,26 @@
<scope>compile</scope>
</dependency>
<!-- MultiLib -->
<dependency>
<groupId>com.github.puregero</groupId>
<artifactId>multilib</artifactId>
<version>1.1.13</version>
<scope>compile</scope>
</dependency>
<!-- JDBC drivers for datasource integration tests -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.45.3.0</version>
<version>3.45.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
<scope>provided</scope>
<scope>compile</scope>
</dependency>
</dependencies>
+1 -8
View File
@@ -2,7 +2,6 @@ package fr.xephi.authme;
import ch.jalu.injector.Injector;
import ch.jalu.injector.InjectorBuilder;
import com.alessiodp.libby.BukkitLibraryManager;
import com.github.Anon8281.universalScheduler.UniversalScheduler;
import com.github.Anon8281.universalScheduler.scheduling.schedulers.TaskScheduler;
import fr.xephi.authme.api.v3.AuthMeApi;
@@ -81,7 +80,7 @@ public class AuthMe extends JavaPlugin {
// Version and build number values
private static String pluginVersion = "5.6.0-Fork";
private static final String pluginBuild = "b";
private static String pluginBuildNumber = "49";
private static String pluginBuildNumber = "47";
// Private instances
private EmailService emailService;
private CommandHandler commandHandler;
@@ -144,11 +143,6 @@ public class AuthMe extends JavaPlugin {
return scheduler;
}
/**
* The library manager
*/
public static BukkitLibraryManager libraryManager;
/**
* Method called when the server enables the plugin.
*/
@@ -157,7 +151,6 @@ public class AuthMe extends JavaPlugin {
// Load the plugin version data from the plugin description file
loadPluginInfo(getDescription().getVersion());
scheduler = UniversalScheduler.getScheduler(this);
libraryManager = new BukkitLibraryManager(this);
// Set the Logger instance and log file path
ConsoleLogger.initialize(getLogger(), new File(getDataFolder(), LOG_FILENAME));
@@ -29,7 +29,7 @@ import static fr.xephi.authme.datasource.SqlDataSourceUtils.logSqlException;
/**
* H2 data source.
*/
@SuppressWarnings({"checkstyle:AbbreviationAsWordInName"}) // Justification: Class name cannot be changed anymore
@SuppressWarnings({"all"}) // Justification: Class name cannot be changed anymore
public class H2 extends AbstractSqlDataSource {
private final ConsoleLogger logger = ConsoleLoggerFactory.get(H2.class);
@@ -1,6 +1,5 @@
package fr.xephi.authme.initialization;
import com.alessiodp.libby.Library;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.data.auth.PlayerCache;
import fr.xephi.authme.datasource.CacheDataSource;
@@ -22,8 +21,6 @@ import javax.inject.Provider;
import java.io.File;
import java.sql.SQLException;
import static fr.xephi.authme.AuthMe.libraryManager;
/**
* Creates the AuthMe data source.
*/
@@ -81,14 +78,8 @@ public class DataSourceProvider implements Provider<DataSource> {
dataSource = new SQLite(settings, dataFolder);
break;
case H2:
Library h2 = Library.builder()
.groupId("com.h2database")
.artifactId("h2")
.version("2.2.224")
.build();
libraryManager.addMavenCentral();
libraryManager.loadLibrary(h2);
dataSource = new H2(settings, dataFolder);
logger.warning("You are using H2 database, which is still in development!\nMake sure to backup and report any issues you encounter on GitHub!");
break;
default:
throw new UnsupportedOperationException("Unknown data source type '" + dataSourceType + "'");
@@ -1,5 +1,6 @@
package fr.xephi.authme.listener;
import com.github.puregero.multilib.MultiLib;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.api.v3.AuthMeApi;
import fr.xephi.authme.data.auth.PlayerCache;
@@ -81,7 +82,11 @@ class ListenerService implements SettingsDependent {
*/
public boolean shouldCancelEvent(Player player) {
if (MultiLib.isMultiPaper()) {
if (MultiLib.isExternalPlayer(player)) {
return false;
}
}
return player != null && !checkAuth(player.getName()) && !PlayerUtils.isNpc(player);
}
public boolean shouldCancelInvEvent(Player player) {
@@ -158,7 +158,7 @@ public class EmailService {
try {
htmlEmail = sendMailSsl.initializeMail(email);
} catch (EmailException e) {
logger.logException("Failed to create email for shutdown:", e);
logger.logException("Failed to create email for recovery code:", e);
return;
}
@@ -1,6 +1,5 @@
package fr.xephi.authme.process.quit;
import com.github.Anon8281.universalScheduler.UniversalScheduler;
import fr.xephi.authme.data.limbo.LimboService;
import fr.xephi.authme.process.SynchronousProcess;
import fr.xephi.authme.settings.commandconfig.CommandManager;
@@ -28,9 +27,7 @@ public class ProcessSyncPlayerQuit implements SynchronousProcess {
commandManager.runCommandsOnLogout(player);
} else {
limboService.restoreData(player);
if (!UniversalScheduler.isFolia) { // AuthMeReReloaded - Fix #146 (Very stupid solution, but works)
player.saveData(); // #1238: Speed is sometimes not restored properly
}
player.saveData(); // #1238: Speed is sometimes not restored properly
}
player.leaveVehicle();
}
@@ -103,7 +103,7 @@ public class AsynchronousUnregister implements AsynchronousProcess {
public void adminUnregister(CommandSender initiator, String name, Player player) {
if (dataSource.removeAuth(name)) {
performPostUnregisterActions(name, player);
if (player != null) velocitySender.sendAuthMeVelocityMessage(player, VMessageType.FORCE_UNREGISTER);
velocitySender.sendAuthMeVelocityMessage(player, VMessageType.FORCE_UNREGISTER);
bukkitService.createAndCallEvent(isAsync -> new UnregisterByAdminEvent(player, name, isAsync, initiator));
if (initiator == null) {
logger.info(name + " was unregistered");
@@ -1,12 +1,12 @@
package fr.xephi.authme.service;
import com.github.Anon8281.universalScheduler.UniversalRunnable;
import com.github.Anon8281.universalScheduler.UniversalScheduler;
import com.github.Anon8281.universalScheduler.scheduling.tasks.MyScheduledTask;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.initialization.SettingsDependent;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.Utils;
import org.bukkit.BanEntry;
import org.bukkit.BanList;
import org.bukkit.Bukkit;
@@ -38,7 +38,7 @@ public class BukkitService implements SettingsDependent {
/** Number of ticks per minute. */
public static final int TICKS_PER_MINUTE = 60 * TICKS_PER_SECOND;
/** Whether the server is running Folia. */
private static final boolean isFolia = UniversalScheduler.isFolia;
private static final boolean IS_FOLIA = Utils.isClassLoaded("io.papermc.paper.threadedregions.RegionizedServer");
private final AuthMe authMe;
private boolean useAsyncTasks;
@@ -68,7 +68,7 @@ public class BukkitService implements SettingsDependent {
* @param delay Delay in server ticks before executing task
*/
public void scheduleSyncDelayedTask(Runnable task, long delay) {
if (isFolia) {
if (IS_FOLIA) {
runTaskLater(task, delay);
} else {
Bukkit.getScheduler().runTaskLater(authMe, task, delay); // We must do this to keep compatibility
@@ -98,7 +98,7 @@ public class BukkitService implements SettingsDependent {
* @throws IllegalArgumentException if task is null
*/
public void runTask(Runnable task) {
if (isFolia) {
if (IS_FOLIA) {
getScheduler().runTask(task);
} else {
Bukkit.getScheduler().runTask(authMe, task);
@@ -106,7 +106,7 @@ public class BukkitService implements SettingsDependent {
}
public void runTask(Entity entity, Runnable task) {
if (isFolia) {
if (IS_FOLIA) {
getScheduler().runTask(entity, task);
} else {
Bukkit.getScheduler().runTask(authMe, task);
@@ -122,7 +122,7 @@ public class BukkitService implements SettingsDependent {
* @param task the task to be run
*/
public void runTaskIfFolia(Runnable task) {
if (isFolia) {
if (IS_FOLIA) {
runTask(task);
} else {
task.run();
@@ -134,7 +134,7 @@ public class BukkitService implements SettingsDependent {
* @param task the task to be run
*/
public void runTaskIfFolia(Entity entity, Runnable task) {
if (isFolia) {
if (IS_FOLIA) {
runTask(entity, task);
} else {
task.run();
@@ -146,7 +146,7 @@ public class BukkitService implements SettingsDependent {
* @param task the task to be run
*/
public void runTaskIfFolia(Location location, Runnable task) {
if (isFolia) {
if (IS_FOLIA) {
runTask(location, task);
} else {
task.run();
@@ -196,7 +196,7 @@ public class BukkitService implements SettingsDependent {
* @throws IllegalArgumentException if task is null
*/
public void runTaskAsynchronously(Runnable task) {
if (isFolia) {
if (IS_FOLIA) {
getScheduler().runTaskAsynchronously(task);
} else {
Bukkit.getScheduler().runTaskAsynchronously(authMe, task);
@@ -144,9 +144,7 @@ public class TeleportationService implements Reloadable {
} else if (settings.getProperty(TELEPORT_UNAUTHED_TO_SPAWN)) {
if (settings.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION)) {
Location location = buildLocationFromAuth(player, auth);
Location playerLoc = player.getLocation();
if (location.getX() == playerLoc.getX() && location.getY() == location.getY() && location.getZ() == playerLoc.getZ()
&& location.getWorld() == playerLoc.getWorld()) return;
if (location.equals(player.getLocation())) return;
logger.debug("Teleporting `{0}` after login, based on the player auth", player.getName());
teleportBackFromSpawn(player, location);
} else if (limbo != null && limbo.getLocation() != null) {
@@ -36,8 +36,7 @@ public final class PluginSettings implements SettingsHolder {
@Comment({
"Message language, available languages:",
"https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/translations.md",
"Example: zhcn, en"
"https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/translations.md"
})
public static final Property<String> MESSAGES_LANGUAGE =
newProperty("settings.messagesLanguage", "en");
Binary file not shown.
+1 -1
View File
@@ -4,7 +4,7 @@ website: http://github.com/HaHaWTH/AuthMeReReloaded/
description: A fork of AuthMeReloaded that contains bug fixes
main: ${pluginDescription.main}
folia-supported: true
version: 5.6.0-FORK-b49
version: 5.6.0-FORK-b47
api-version: 1.13
softdepend:
- Vault