Added timeout

Added timeout for not authenticated players, as well as kick for wrong password.
This commit is contained in:
samo_lego 2020-01-03 22:46:30 +01:00
parent 9965e8d804
commit 16773c125a
4 changed files with 22 additions and 6 deletions

View File

@ -117,7 +117,7 @@ public class AuthCommand {
if(sender != null)
sender.sendMessage(configurationReloaded);
else
LOGGER.info(configurationReloaded);
LOGGER.info(SimpleAuth.config.lang.configurationReloaded);
return 1;
}
}

View File

@ -6,7 +6,6 @@ import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Text;
import net.minecraft.text.Text;
import org.samo_lego.simpleauth.SimpleAuth;
import org.samo_lego.simpleauth.utils.AuthHelper;
@ -47,12 +46,11 @@ public class LoginCommand {
// Player no longer needs to be invisible and invulnerable
player.setInvulnerable(false);
player.setInvisible(false);
//player.setAir(AuthEventHandler.playerAir);
//player.getDataTracker().startTracking();
player.sendMessage(successfullyAuthenticated);
return 1;
}
player.sendMessage(wrongPassword);
player.networkHandler.disconnect(wrongPassword);
//player.sendMessage(wrongPassword);
return 0;
}
}

View File

@ -9,12 +9,17 @@ import net.minecraft.util.ActionResult;
import net.minecraft.util.TypedActionResult;
import org.samo_lego.simpleauth.SimpleAuth;
import java.util.Timer;
import java.util.TimerTask;
/**
* This class will take care of actions players try to do,
* and cancels them if they aren't authenticated
* and cancel them if they aren't authenticated
*/
public class AuthEventHandler {
private static TranslatableText notAuthenticated = new TranslatableText(SimpleAuth.config.lang.notAuthenticated);
private static TranslatableText timeExpired = new TranslatableText(SimpleAuth.config.lang.timeExpired);
private static int delay = SimpleAuth.config.main.delay;
// Player joining the server
public static void onPlayerJoin(ServerPlayerEntity player) {
@ -24,6 +29,14 @@ public class AuthEventHandler {
// 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);
}
}
// Player leaving the server

View File

@ -37,8 +37,12 @@ public class AuthConfig {
public boolean allowItemUse = false;
public boolean allowEntityPunch = false;
public boolean allowEntityInteract = false;
// If player should be invulnerable before authentication
public boolean playerInvulnerable = true;
// If player should be invisible to mobs before authentication
public boolean playerInvisible = true;
// Time after which player will be kicked if not authenticated [s]
public int delay = 60;
}
public static class LangConfig {
public String enterPassword = "§6You need to enter your password!";
@ -49,6 +53,7 @@ public class AuthConfig {
public String notAuthenticated = "§cYou are not authenticated!\n§6Try with /login or /register.";
public String alreadyAuthenticated = "§4You are already authenticated.";
public String successfullyAuthenticated = "§aYou are now authenticated.";
public String timeExpired = "§cTime for authentication has expired.";
public String alreadyRegistered = "§6This account name is already registered!";
public String registerSuccess = "§aYou are now authenticated.";
public String userdataDeleted = "§aUserdata deleted.";