diff --git a/gradle.properties b/gradle.properties index 11ac059..d9333e1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,6 +10,6 @@ loader_version=0.7.8+build.189 fabric_version=0.5.6+build.313-1.16 # Mod Properties - mod_version = 1.3.0 + mod_version = 1.3.1 maven_group = org.samo_lego archives_base_name = simpleauth diff --git a/src/main/java/org/samo_lego/simpleauth/SimpleAuth.java b/src/main/java/org/samo_lego/simpleauth/SimpleAuth.java index f2db7a1..fe1fdb2 100644 --- a/src/main/java/org/samo_lego/simpleauth/SimpleAuth.java +++ b/src/main/java/org/samo_lego/simpleauth/SimpleAuth.java @@ -9,6 +9,7 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.Inventory; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -25,6 +26,8 @@ import org.samo_lego.simpleauth.utils.AuthConfig; import java.io.File; import java.util.HashMap; import java.util.HashSet; +import java.util.Timer; +import java.util.TimerTask; public class SimpleAuth implements DedicatedServerModInitializer { private static final Logger LOGGER = LogManager.getLogger(); @@ -66,6 +69,7 @@ public class SimpleAuth implements DedicatedServerModInitializer { CommandRegistry.INSTANCE.register(false, dispatcher -> { RegisterCommand.registerCommand(dispatcher); LoginCommand.registerCommand(dispatcher); + LogoutCommand.registerCommand(dispatcher); ChangepwCommand.registerCommand(dispatcher); UnregisterCommand.registerCommand(dispatcher); AuthCommand.registerCommand(dispatcher); @@ -96,4 +100,34 @@ public class SimpleAuth implements DedicatedServerModInitializer { player.setInvisible(false); player.sendMessage(msg); } + + // Getting some config options + private static Text notAuthenticated() { + if(SimpleAuth.config.main.enableGlobalPassword) { + return new LiteralText(SimpleAuth.config.lang.loginRequired); + } + return new LiteralText(SimpleAuth.config.lang.notAuthenticated); + } + private static Text timeExpired = new LiteralText(SimpleAuth.config.lang.timeExpired); + private static int delay = SimpleAuth.config.main.delay; + + + public static void deauthenticatePlayer(ServerPlayerEntity player) { + // Marking player as not authenticated, (re)setting login tries to zero + SimpleAuth.deauthenticatedUsers.put(player, 0); + + // Player is now not authenticated + player.sendMessage(notAuthenticated()); + // Setting the player to be invisible to mobs and also invulnerable + player.setInvulnerable(SimpleAuth.config.main.playerInvulnerable); + player.setInvisible(SimpleAuth.config.main.playerInvisible); + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if(!SimpleAuth.isAuthenticated(player)) // Kicking player if not authenticated + player.networkHandler.disconnect(timeExpired); + } + }, delay * 1000); + } } \ No newline at end of file diff --git a/src/main/java/org/samo_lego/simpleauth/commands/LoginCommand.java b/src/main/java/org/samo_lego/simpleauth/commands/LoginCommand.java index 6b1b588..58d9a93 100644 --- a/src/main/java/org/samo_lego/simpleauth/commands/LoginCommand.java +++ b/src/main/java/org/samo_lego/simpleauth/commands/LoginCommand.java @@ -20,7 +20,7 @@ public class LoginCommand { private static Text alreadyAuthenticated = new LiteralText(SimpleAuth.config.lang.alreadyAuthenticated); private static Text loginTriesExceeded = new LiteralText(SimpleAuth.config.lang.loginTriesExceeded); private static Text successfullyAuthenticated = new LiteralText(SimpleAuth.config.lang.successfullyAuthenticated); - private static int maxLoginTries = 3; + private static int maxLoginTries = SimpleAuth.config.main.maxLoginTries; public static void registerCommand(CommandDispatcher dispatcher) { // Registering the "/login" command diff --git a/src/main/java/org/samo_lego/simpleauth/commands/LogoutCommand.java b/src/main/java/org/samo_lego/simpleauth/commands/LogoutCommand.java new file mode 100644 index 0000000..cdf2bb8 --- /dev/null +++ b/src/main/java/org/samo_lego/simpleauth/commands/LogoutCommand.java @@ -0,0 +1,28 @@ +package org.samo_lego.simpleauth.commands; + +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; +import org.samo_lego.simpleauth.SimpleAuth; + +import static net.minecraft.server.command.CommandManager.literal; + +public class LogoutCommand { + private static Text successfulLogout = new LiteralText(SimpleAuth.config.lang.successfulLogout); + + public static void registerCommand(CommandDispatcher dispatcher) { + // Registering the "/login" command + dispatcher.register(literal("login") + .executes(ctx -> logout(ctx.getSource())) // Tries to authenticate user + ); + } + + private static int logout(ServerCommandSource serverCommandSource) throws CommandSyntaxException { + ServerPlayerEntity player = serverCommandSource.getPlayer(); + SimpleAuth.deauthenticatePlayer(player); + return 1; + } +} diff --git a/src/main/java/org/samo_lego/simpleauth/event/AuthEventHandler.java b/src/main/java/org/samo_lego/simpleauth/event/AuthEventHandler.java index f7ae060..d262303 100644 --- a/src/main/java/org/samo_lego/simpleauth/event/AuthEventHandler.java +++ b/src/main/java/org/samo_lego/simpleauth/event/AuthEventHandler.java @@ -24,30 +24,10 @@ public class AuthEventHandler { } return new LiteralText(SimpleAuth.config.lang.notAuthenticated); } - private static Text timeExpired = new LiteralText(SimpleAuth.config.lang.timeExpired); - private static int delay = SimpleAuth.config.main.delay; // Player joining the server public static void onPlayerJoin(ServerPlayerEntity player) { - // Marking player as not authenticated, (re)setting login tries to zero - SimpleAuth.deauthenticatedUsers.put(player, 0); - - // Player not authenticated - // If clause actually not needed, since we add player to deauthenticated hashset above - if (!SimpleAuth.isAuthenticated(player)) { - player.sendMessage(notAuthenticated()); - // Setting the player to be invisible to mobs and also invulnerable - player.setInvulnerable(SimpleAuth.config.main.playerInvulnerable); - player.setInvisible(SimpleAuth.config.main.playerInvisible); - Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - if(!SimpleAuth.isAuthenticated(player)) // Kicking player if not authenticated - player.networkHandler.disconnect(timeExpired); - } - }, delay * 1000); - } + SimpleAuth.deauthenticatePlayer(player); } // Player chatting diff --git a/src/main/java/org/samo_lego/simpleauth/utils/AuthConfig.java b/src/main/java/org/samo_lego/simpleauth/utils/AuthConfig.java index 1107cdc..43b3041 100644 --- a/src/main/java/org/samo_lego/simpleauth/utils/AuthConfig.java +++ b/src/main/java/org/samo_lego/simpleauth/utils/AuthConfig.java @@ -86,7 +86,7 @@ public class AuthConfig { public String userdataUpdated = "§aUserdata updated."; public String accountDeleted = "§4Your account was successfully deleted!"; public String configurationReloaded = "§aConfiguration file was reloaded successfully."; - + public String successfulLogout; } private static final Logger LOGGER = LogManager.getLogger(); private static final Gson gson = new GsonBuilder()