diff --git a/README.md b/README.md
index cc1125b2..7ec83167 100644
--- a/README.md
+++ b/README.md
@@ -81,6 +81,7 @@ Possible values: `Premium`, `Cracked`, `Unknown`
* [CrazyLogin](https://dev.bukkit.org/bukkit-plugins/crazylogin/)
* [LoginSecurity](https://dev.bukkit.org/bukkit-plugins/loginsecurity/)
* [UltraAuth](https://dev.bukkit.org/bukkit-plugins/ultraauth-aa/)
+* [SodionAuth](https://github.com/Mohist-Community/SodionAuth)
### BungeeCord/Waterfall
diff --git a/bukkit/lib/SodionAuth-Bukkit-2.0-API-only.jar b/bukkit/lib/SodionAuth-Bukkit-2.0-API-only.jar
new file mode 100644
index 00000000..50641972
Binary files /dev/null and b/bukkit/lib/SodionAuth-Bukkit-2.0-API-only.jar differ
diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index 1d1e1edf..12980349 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -233,5 +233,14 @@
system
${project.basedir}/lib/UltraAuth v2.1.2.jar
+
+
+ red.mohist.sodionauth
+ SodionAuth-Bukkit
+ 2.0-SNAPSHOT
+ true
+ system
+ ${project.basedir}/lib/SodionAuth-Bukkit-2.0-API-only.jar
+
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hook/SodionAuthHook.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hook/SodionAuthHook.java
new file mode 100644
index 00000000..85b84417
--- /dev/null
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hook/SodionAuthHook.java
@@ -0,0 +1,49 @@
+package com.github.games647.fastlogin.bukkit.hook;
+
+import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
+import com.github.games647.fastlogin.core.hooks.AuthPlugin;
+import org.bukkit.entity.Player;
+import red.mohist.sodionauth.bukkit.implementation.BukkitPlayer;
+import red.mohist.sodionauth.core.SodionAuthApi;
+import red.mohist.sodionauth.core.exception.AuthenticatedException;
+
+/**
+ * GitHub: https://github.com/Mohist-Community/SodionAuth
+ *
+ * Project page:
+ *
+ * Bukkit: Unknown
+ *
+ * Spigot: Unknown
+ */
+public class SodionAuthHook implements AuthPlugin {
+
+ private final FastLoginBukkit plugin;
+
+ public SodionAuthHook(FastLoginBukkit plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public boolean forceLogin(Player player) {
+ try {
+ SodionAuthApi.login(new BukkitPlayer(player));
+ } catch (AuthenticatedException e) {
+ plugin.getLog().warn(ALREADY_AUTHENTICATED, player);
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean forceRegister(Player player, String password) {
+ plugin.getLog().warn("AutoRegister is not implemented by SodionAuth yet.");
+ plugin.getLog().warn("Disable it to prevent further issue!");
+ return false;
+ }
+
+ @Override
+ public boolean isRegistered(String playerName) {
+ return SodionAuthApi.isRegister(playerName);
+ }
+}
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/task/DelayedAuthHook.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/task/DelayedAuthHook.java
index 53be506b..3a4e8756 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/task/DelayedAuthHook.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/task/DelayedAuthHook.java
@@ -7,6 +7,7 @@ import com.github.games647.fastlogin.bukkit.hook.LogItHook;
import com.github.games647.fastlogin.bukkit.hook.LoginSecurityHook;
import com.github.games647.fastlogin.bukkit.hook.UltraAuthHook;
import com.github.games647.fastlogin.bukkit.hook.xAuthHook;
+import com.github.games647.fastlogin.bukkit.hook.SodionAuthHook;
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import java.lang.reflect.Constructor;
@@ -70,8 +71,8 @@ public class DelayedAuthHook implements Runnable {
try {
@SuppressWarnings("unchecked")
List>> hooks = Arrays.asList(AuthMeHook.class,
- CrazyLoginHook.class, LogItHook.class, LoginSecurityHook.class, UltraAuthHook.class,
- xAuthHook.class);
+ CrazyLoginHook.class, LogItHook.class, LoginSecurityHook.class,
+ SodionAuthHook.class, UltraAuthHook.class, xAuthHook.class);
for (Class extends AuthPlugin> clazz : hooks) {
String pluginName = clazz.getSimpleName().replace("Hook", "");