release-1.0.0 #24

Merged
cuqmbr merged 67 commits from develop into main 2025-08-14 14:57:21 +00:00
8 changed files with 1019468 additions and 1 deletions
Showing only changes of commit e0e2e4b1ee - Show all commits

View File

@ -1 +1,2 @@
*/logs */logs
src/librelogin.db

1
.gitattributes vendored
View File

@ -1 +1,2 @@
*.jar filter=lfs diff=lfs merge=lfs -text *.jar filter=lfs diff=lfs merge=lfs -text
src/plugins/librelogin/forbidden-passwords.txt filter=lfs diff=lfs merge=lfs -text

3
.gitignore vendored
View File

@ -1 +1,4 @@
*/logs */logs
src/plugins/librelogin/lib
src/plugins/librelogin/LICENSE.txt
src/librelogin.db

View File

@ -19,6 +19,8 @@ ENV MEMORY=4G
ENV PROXY_SECRET=change_me ENV PROXY_SECRET=change_me
ENV SERVERS=lobby="lobby:25565";survival="survival:25565" ENV SERVERS=lobby="lobby:25565";survival="survival:25565"
ENV TRY=lobby;survival ENV TRY=lobby;survival
ENV LIBRELOGIN_LIMBOS=limbo
ENV LIBRELOGIN_LOBBIES=lobby
WORKDIR ${WORKDIR_PATH}/config WORKDIR ${WORKDIR_PATH}/config
@ -27,7 +29,14 @@ EXPOSE 25565/tcp
# TODO: Make awk commands sapn multiple lines # TODO: Make awk commands sapn multiple lines
# TODO: Use one call to awk to perform substitutions # TODO: Use one call to awk to perform substitutions
CMD \ CMD \
# Add proxy secret
sed -i "s/_PROXY_SECRET_/${PROXY_SECRET}/g" forwarding.secret && \ sed -i "s/_PROXY_SECRET_/${PROXY_SECRET}/g" forwarding.secret && \
awk -v servers_str="${SERVERS}" '{ count=split(servers_str,servers_arr,";"); servers_fmt_str = ""; for (i = 1; i <= count; i++) servers_fmt_str = servers_fmt_str servers_arr[i] "\n"; sub(/_SERVERS_/,servers_fmt_str); print }' velocity.toml > velocity.toml.tmp && mv -T -f velocity.toml.tmp velocity.toml &&\ # Add servers to velocity.toml
awk -v servers_str="${SERVERS}" '{ count=split(servers_str,servers_arr,";"); servers_fmt_str = ""; for (i = 1; i <= count; i++) servers_fmt_str = servers_fmt_str servers_arr[i] "\n"; sub(/_SERVERS_/,servers_fmt_str); print }' velocity.toml > velocity.toml.tmp && mv -T -f velocity.toml.tmp velocity.toml && \
# Add try servers to velocity.toml
awk -v try_str="${TRY}" '{ count=split(try_str,try_arr,";"); try_fmt_str = ""; for (i = 1; i <= count; i++) try_fmt_str = try_fmt_str "\"" try_arr[i] "\"" ",\n "; sub(/_TRY_/,try_fmt_str); print }' velocity.toml > velocity.toml.tmp && mv -T -f velocity.toml.tmp velocity.toml && \ awk -v try_str="${TRY}" '{ count=split(try_str,try_arr,";"); try_fmt_str = ""; for (i = 1; i <= count; i++) try_fmt_str = try_fmt_str "\"" try_arr[i] "\"" ",\n "; sub(/_TRY_/,try_fmt_str); print }' velocity.toml > velocity.toml.tmp && mv -T -f velocity.toml.tmp velocity.toml && \
# Add limbo servers to librelogin config
awk -v limbos_str="${LIBRELOGIN_LIMBOS}" '{ count=split(limbos_str,limbos_arr,";"); limbos_fmt_str = ""; for (i = 1; i <= count; i++) limbos_fmt_str = limbos_fmt_str limbos_arr[i] ",\n "; sub(/_LIBRELOGIN_LIMBOS_/,limbos_fmt_str); print }' plugins/librelogin/config.conf > plugins/librelogin/config.conf.tmp && mv -T -f plugins/librelogin/config.conf.tmp plugins/librelogin/config.conf && \
# Add lobby servers to librelogin config
awk -v lobbies_str="${LIBRELOGIN_LOBBIES}" '{ count=split(lobbies_str,lobbies_arr,";"); lobbies_fmt_str = ""; for (i = 1; i <= count; i++) lobbies_fmt_str = lobbies_fmt_str lobbies_arr[i] ",\n "; sub(/_LIBRELOGIN_LOBBIES_/,lobbies_fmt_str); print }' plugins/librelogin/config.conf > plugins/librelogin/config.conf.tmp && mv -T -f plugins/librelogin/config.conf.tmp plugins/librelogin/config.conf && \
java -Xms${MEMORY} -Xmx${MEMORY} -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar *.jar java -Xms${MEMORY} -Xmx${MEMORY} -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch -XX:MaxInlineLevel=15 -jar *.jar

BIN
src/plugins/LibreLogin.jar (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,241 @@
# !!THIS FILE IS WRITTEN IN THE HOCON FORMAT!!
# The hocon format is very similar to JSON, but it has some extra features.
# You can find more information about the format on the sponge wiki:
# https://docs.spongepowered.org/stable/en/server/getting-started/configuration/hocon.html
# ----------------------------------------------------------------------------------------
# LibreLogin Configuration
# ----------------------------------------------------------------------------------------
# This is the configuration file for LibreLogin.
# You can find more information about LibreLogin on the github page:
# https://github.com/kyngs/LibreLogin
# !!!THIS ONLY AFFECTS PAPER!!!
# Verifies whether the IP the players had used when authenticating to Mojang matches the IP they are connecting from. Disabling this may break LibreLogin if the server is running under a reverse proxy/VPN.
allow-proxy-connections=true
# Commands that are allowed while the user is not authorized.
allowed-commands-while-unauthorized=[
login,
register,
"2fa",
"2faconfirm",
l,
log,
reg,
resetpassword,
confirmpasswordreset
]
# Should we automatically register all players with a premium nickname?
# !!CRACKED PLAYERS WILL NOT BE ABLE TO REGISTER PREMIUM USERNAMES!!
auto-register=false
# This section is used for MySQL database configuration.
database {
properties {
mysql {
# The name of the database.
database=librelogin
# The host of the database.
host=localhost
# The JDBC URL of the database. Don't touch this if you don't know what you're doing. (Using jdbc:mariadb also works for pure mysql)
jdbc-url="jdbc:mariadb://%host%:%port%/%database%?autoReconnect=true&zeroDateTimeBehavior=convertToNull"
# The maximum lifetime of a database connection in milliseconds. Don't touch this if you don't know what you're doing.
max-life-time=600000
# The password of the database.
password=""
# The port of the database.
port=3306
# The user of the database.
user=root
}
postgresql {
# The name of the database.
database=librelogin
# The host of the database.
host=localhost
# The maximum lifetime of a database connection in milliseconds. Don't touch this if you don't know what you're doing.
max-life-time=600000
# The password of the database.
password=""
# The port of the database.
port=5432
# The user of the database.
user=root
}
sqlite {
# Path to SQLite database file. Relative to plugin datafolder.
path="../../librelogin.db"
}
}
# The type of the database. Built-in types:
# librelogin-mysql - MySQL database, you must fill out the mysql section below.
# librelogin-postgresql - PostgreSQL database, you must fill out the postgresql section below.
# librelogin-sqlite - SQLite database, default file is "database.db", you can change it in the sqlite section below.
type=librelogin-sqlite
}
# Should we enable debug mode? This will print out debug messages to the console.
debug=false
# The default crypto provider. This is used for hashing passwords. Available Providers:
# SHA-256 - Older, not recommended. Kept for compatibility reasons.
# SHA-512 - More safer than SHA-256, but still not recommended. Kept for compatibility reasons.
# BCrypt-2A - Newer, more safe, recommended
# Argon-2ID - Newest, should be safer than BCrypt-2A, however, it can slow down the server.
default-crypto-provider=BCrypt-2A
# !!THIS OPTION IS IRRELEVANT WHEN USING PAPER!! Should we fallback players to lobby servers if the server they are on shutdowns? If set to false, they will be kicked.
fallback=false
# By default, when choosing available lobby/limbos LibreLogin will rule out all the servers which are full.
# Sometimes this may not work as expected. In such case, you can enable this option, which will ignore the max players field obtained by pinging the backend server.
ignore-max-players-from-backend-ping=false
# Sets the maximum amount of accounts that can be registered from the same IP address.
# Set to zero or less to disable.
# !!THIS IS NOT RECOMMENDED!! Due to the lack of IPv4 addresses, sometimes even entire villages share the same IP address.
ip-limit=-1
# The authentication servers/worlds, players should be sent to, when not authenticated. On Paper, players will be spawned on the world spawn. THIS SERVERS MUST BE REGISTERED IN THE PROXY CONFIG. IN CASE OF PAPER, THE WORLDS MUST EXIST.
limbo=[
_LIBRELOGIN_LIMBOS_
]
# !!THIS OPTION IS IRRELEVANT WHEN USING PAPER!! Defines port(s) that limbo server can be bounded to.
limbo-port-range="30000-40000"
# !!WHEN USING PAPER, PUT ALL WORLDS UNDER "root"!!
# On Paper, players will be spawned on the world spawn.
#
# The servers/worlds player should be sent to when they are authenticated. THE SERVERS MUST BE REGISTERED IN THE PROXY CONFIG. IN CASE OF PAPER, THE WORLDS MUST EXIST.
# The configuration allows configuring forced hosts; the servers/worlds in "root" are used when players do not connect from a forced host. Use § instead of dots.
# See: https://github.com/kyngs/LibrePremium/wiki/Configuring-Servers
lobby {
root=[
_LIBRELOGIN_LOBBIES_
]
}
mail {
# The email to use as a sender in the From field.
email="email@something.com"
# Should we enable the email password recovery feature?
enabled=false
# The host of the SMTP server.
host="smtp.gmail.com"
# The password used to login to the SMTP server. We highly recommend you use a unique one-time password for this.
password=password
# The port of the SMTP server.
port=587
# The sender of the email.
sender="LibreLogin Network"
# The username used to login to the SMTP server.
username=username
}
# Kick the player, if the password was incorrect more or equal times. -1 means disabled
max-login-attempts=3
# This is used for migrating the database from other plugins.
# Please see the wiki for further information: https://github.com/kyngs/LibreLogin/wiki/Database-Migration
migration {
old-database {
mysql {
# The name of the database.
database=librelogin
# The host of the database.
host=localhost
# The JDBC URL of the database. Don't touch this if you don't know what you're doing. (Using jdbc:mariadb also works for pure mysql)
jdbc-url="jdbc:mariadb://%host%:%port%/%database%?autoReconnect=true&zeroDateTimeBehavior=convertToNull"
# The maximum lifetime of a database connection in milliseconds. Don't touch this if you don't know what you're doing.
max-life-time=600000
# The password of the database.
password=""
# The port of the database.
port=3306
# The table of the old database.
table=user-data
# The user of the database.
user=root
}
postgresql {
# The name of the database.
database=librelogin
# The host of the database.
host=localhost
# The maximum lifetime of a database connection in milliseconds. Don't touch this if you don't know what you're doing.
max-life-time=600000
# The password of the database.
password=""
# The port of the database.
port=5432
# The table of the old database.
table=user-data
# The user of the database.
user=root
}
sqlite {
# Path to SQLite database file. Relative to plugin datafolder.
path="user-data.db"
}
}
# Migrate the database on the next startup.
on-next-startup=false
# The type of the migration. Available Types:
# jpremium-mysql - Can convert from MySQL JPremium SHA256, SHA512 and BCrypt
# authme-mysql - Can convert from MySQL AuthMe BCrypt and SHA256
# authme-sqlite - Can convert from SQLite AuthMe BCrypt and SHA256
# authme-postgresql - Can convert from PostgreSQL AuthMe BCrypt and SHA256
# aegis-mysql - Can convert from MySQL Aegis BCrypt
# dba-mysql - Can convert from MySQL DynamicBungeeAuth, which was configured to use SHA-512
# nlogin-sqlite - Can convert from SQLite NLogin SHA512
# nlogin-mysql - Can convert from MySQL NLogin SHA512
# loginsecurity-mysql - Can convert from MySQL LoginSecurity BCrypt
# loginsecurity-sqlite - Can convert from SQLite LoginSecurity BCrypt
# fastlogin-sqlite - Can convert from SQLite FastLogin, !!YOU MUST RUN CONVERSION FROM AUTHME FIRST!!
# fastlogin-mysql - Can convert from MySQL FastLogin, !!YOU MUST RUN CONVERSION FROM AUTHME FIRST!!
# limboauth-mysql - Can convert from MySQL LimboAuth BCrypt and SHA256
# authy-mysql - Can convert from MySQL Authy SHA256
# authy-sqlite - Can convert from SQLite Authy SHA256
# logit-mysql - Can convert from MySQL LogIt SHA256
# librelogin-mysql - Can convert from MySQL LibreLogin, useful for migrating to a different database
# librelogin-sqlite - Can convert from SQLite LibreLogin, useful for migrating to a different database
type=authme-sqlite
}
# Time to reset login attempts. The amount of time the player should have waited for their login attempts to expire. On every rejoin, login attempts are reset.
milliseconds-to-refresh-login-attempts=10000
# This specifies how often players should be notified when not authenticated. Set to negative to disable.
# This includes (but is not limited to):
# - Message in chat
# - Title
milliseconds-to-refresh-notification=10000
# The minimum length of a password. Set to negative to disable.
minimum-password-length=-1
# The minimum length the player's name can have. Only applies to new players, set to 0 or lower to disable.
minimum-username-length=-1
# Sets which method should be used for creating fixed UUID when a new player is created.
# See the wiki for further information: https://github.com/kyngs/LibreLogin/wiki/UUID-Creators
# Available Creators:
# RANDOM - Generates a random UUID
# CRACKED - Generates a UUID based on the player's name, the same method as if the server was in offline mode
# MOJANG - If the player exists in the Mojang's database, it will be used. Otherwise, CRACKED will be used.
new-uuid-creator=CRACKED
# !!THIS OPTION IS IRRELEVANT WHEN USING PAPER!! Should we ping servers to check if they are online, and get their player count? If you disable this, the pinging servers message will still appear in the console, even though the servers will not be pinged.
ping-servers=false
# Sets the strategy for resolving profile conflicts. Available strategies:
# BLOCK - Kick both players with the message key "kick-name-mismatch". An admin must resolve the conflict manually.
# USE_OFFLINE - Use the offline profile. When both of the players attempt to join, they will be provided with a login screen and will be able to login with the offline player's password. The online player will have to change their nickname to a available one in order to recover their account. Beware, that there's a 30 days cool down for changing nicknames.
# OVERWRITE - Overwrite the offline profile's data with the online profile's data. This will irreversibly delete the offline player's data. !!USE WITH CAUTION; PLAYERS CAN AND WILL ABUSE THIS!!
profile-conflict-resolution-strategy=BLOCK
# Should we remember the last server/world a player was on? This is not recommended for large networks.
remember-last-server=false
# The config revision number. !!DO NOT TOUCH THIS!!
revision=8
# Sets the login/register time limit in seconds. Set to negative to disable.
seconds-to-authorize=300
# Defines a time in seconds after a player's session expires. Default value is one week (604800 seconds). Set to zero or less to disable sessions.
session-timeout=21600
# This section is used for 2FA configuration.
# !! YOU MUST HAVE PROTOCOLIZE INSTALLED FOR THIS TO WORK !!
#
# You can find more information on the wiki: https://github.com/kyngs/LibreLogin/wiki/2FA
totp {
# The delay in milliseconds until player is given a map to scan the QR code. Increase this value if the map disappears too quickly.
delay=5000
# Should we enable TOTP-Based Two-Factor Authentication? If you don't know what this is, this is the 2FA used in applications like Google Authenticator etc.
# I heavily suggest you to read this wiki page: https://github.com/kyngs/LibreLogin/wiki/2FA
enabled=false
# The label to be displayed in the 2FA app. Change this to your network name.
label=Bebrashield
}
# Whether or not to use action bar when player is awaiting authentication.
use-action-bar=false
# Whether or not to use titles when player is awaiting authentication.
use-titles=false

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,329 @@
# !!THIS FILE IS WRITTEN IN THE HOCON FORMAT!!
# The hocon format is very similar to JSON, but it has some extra features.
# You can find more information about the format on the sponge wiki:
# https://docs.spongepowered.org/stable/en/server/getting-started/configuration/hocon.html
# ----------------------------------------------------------------------------------------
# LibreLogin Messages
# ----------------------------------------------------------------------------------------
# This file contains all of the messages used by the plugin, you are welcome to fit it to your needs.
# The messages can be written both in the legacy format and in the MiniMessage format. For example, the following message is completely valid: <bold>&aReloaded!</bold>
# You can find more information about LibreLogin on the github page:
# https://github.com/kyngs/LibreLogin
# This actionbar is displayed when the player is prompted to login. Make sure that you have use-action-bar set to true in the configuration.
action-bar-login="&e/login &b<password>"
# This actionbar is displayed when the player is prompted to register. Make sure that you have use-action-bar set to true in the configuration.
action-bar-register="&e/register &b<password> <password>"
# This section contains autocompletes for commands. It is pretty large, so most people leave the defaults.
# !!DO NOT TRANSLATE @players!! It is used to hint out all players online.
autocomplete {
# This hint is displayed when the player starts typing the /2fa-confirm command.
"2fa-confirm"=code
# This hint is displayed when the player starts typing the /changepassword command.
change-password="oldPassword newPassword"
# This hint is displayed when the player starts typing the /confirmpasswordreset command.
confirm-password-reset="code newPassword newPassword"
# This hint is displayed when the player starts typing the /librelogin email test command.
email-test=address
# This hint is displayed when the player starts typing the /login command.
login=password
# This hint is displayed when the player starts typing the /premium command.
premium=password
# This hint is displayed when the player starts typing the /register command.
register="password password"
# This hint is displayed when the player starts typing the /resetpassword command.
reset-password=""
# This hint is displayed when the player starts typing the /setemail command.
set-email="address password"
# This hint is displayed when the player starts typing the /librelogin user 2fa-off command.
user-2fa-off="@players"
# This hint is displayed when the player starts typing the /librelogin user alts command.
user-alts="@players"
# This hint is displayed when the player starts typing the /librelogin user cracked command.
user-cracked="@players"
# This hint is displayed when the player starts typing the /librelogin user delete command.
user-delete="@players"
# This hint is displayed when the player starts typing the /librelogin user emailoff command.
user-email-off="@players"
# This hint is displayed when the player starts typing the /librelogin user info command.
user-info="@players"
# This hint is displayed when the player starts typing the /librelogin user login command.
user-login="@players"
# This hint is displayed when the player starts typing the /librelogin user migrate command.
user-migrate="@players newName"
# This hint is displayed when the player starts typing the /librelogin user pass-change command.
user-pass-change="@players newPassword"
# This hint is displayed when the player starts typing the /librelogin user premium command.
user-premium="@players"
# This hint is displayed when the player starts typing the /librelogin user register command.
user-register="@players password"
# This hint is displayed when the player starts typing the /librelogin user setemail command.
user-set-email="@players email"
# This hint is displayed when the player starts typing the /librelogin user unregister command.
user-unregister="@players"
# This hint is displayed when the player starts typing the /verifyemail command.
verify-email=code
}
# This email is sent to the player when they request to reset their password. You can insert any HTML code into this message.
email-password-reset-content="Hello %name%!<br>\nYou (from IP %ip%) have requested to reset your password on %server%.<br>\nIf you did not request this, please ignore this email.<br>\nTo confirm this action, please <b>run the following command in-game: </b><br>\n<b><code><h1>/confirmpasswordreset %code%</h1></code></b><br>\n"
# This is the subject of the email sent to the player when they request to reset their password.
email-password-reset-subject="Reset your password on %server%"
# This email is sent to the player when they request to add a recovery email. You can insert any HTML code into this message.
email-verification-content="Hello %name%!<br>\nYou have requested to add a recovery email on %server%.<br>\nIf you did not request this, please ignore this email.<br>\nTo confirm this action, please <b>run the following command in-game: </b><br>\n<b><code><h1>/verifyemail %code%</h1></code></b><br>\n"
# This is the subject of the email sent to the player when they request to add a recovery email.
email-verification-subject="Verify your email on %server%"
# This message is displayed when the player tries to authorize again.
error-already-authorized="You are already authorized!"
# This message is displayed when the player tries to register again.
error-already-registered="You are already registered!"
# This message is displayed when the configuration file is corrupted.
error-corrupted-configuration="Configuration is corrupted, old one is going to be kept. Cause: %cause%"
# This message is displayed when the messages.conf file is corrupted.
error-corrupted-messages="Messages are corrupted, old ones are going to be kept. Cause: %cause%"
# This message is displayed when the player tries to register with a password that is too short or forbidden.
error-forbidden-password="The password is too short and/or is not allowed!"
# This message is displayed when the player is executing a command, but they are coming from Floodgate.
error-from-floodgate="You can't use this command from Floodgate!"
# This message is displayed when the player uses a command with invalid syntax.
error-invalid-syntax="Usage: <c2>{command}</c2> <c3>{syntax}</c3>"
# This message is displayed when the player tries to send a mail, but it fails to send.
error-mail-not-sent="Failed to send email, perhaps you typed your address wrong? If you are sure that you typed it correctly, please contact an administrator."
# This message is displayed when the player tries to send mail too fast.
error-mail-throttle="You are sending emails too fast! Please wait a bit."
# This message is displayed when the player tries to run /premiumconfirm, before running /premium.
error-no-confirm="Please use /premium <password> first!"
# This message is displayed when the player tries to recover their password, but they don't have a recovery email set.
error-no-email="You don't have a recovery email set!"
# This message is displayed when the player tries to run /mailconfirm, before running /mail.
error-no-mail-confirm="Please use /setemail <email> <password> first!"
# This message is displayed when the player tries to change password without having one.
error-no-password="You don't have a password. You can try using /cracked to disable autologin, and then register."
# This message is displayed when the player tries to run /resetpasswordconfirm, before running /resetpassword.
error-no-password-reset="Please use /resetpassword first!"
# This message is displayed when the player does not have permission to use a command.
error-no-permission="You do not have permission to use this command!"
# This message is displayed when the player tries to use a command that requires authorization.
error-not-authorized="Please authorize first!"
# This message is displayed when someone attempts to use a feature that is not available on MultiProxy.
error-not-available-on-multi-proxy="This feature is not available on MultiProxy!"
# This message is displayed when the player tries to enable autologin, but they already have it enabled.
error-not-cracked="You have autologin enabled, disable it using /cracked!"
# This message is displayed when the player tries to enable autologin, but their account does not exist in the Mojang database.
error-not-paid="This account does not exist in the Mojang database!"
# This message is displayed when the player tries to disable autologin, but they do not have it enabled.
error-not-premium="You do not have autologin enabled, enable it using /premium <password>!"
# This message is displayed when the player tries to login, when they are not registered.
error-not-registered="Please register first!"
# This message is displayed when someone tries to move account to an occupied username.
error-occupied-user="This username is already occupied!"
# This message is displayed when the player tries to login with corrupted password.
error-password-corrupted="Your password is corrupted, please contact an administrator!"
# This message is displayed when the player tries to register with different passwords.
error-password-not-match="Passwords do not match!"
# This message is displayed when someone attempts to reset password while it is disabled.
error-password-resetting-disabled="Password resetting is disabled!"
# This message is displayed when the player tries to register with a password that is too long.
error-password-too-long="The password is too long!"
# This message is displayed when the player tries to authorize with wrong password.
error-password-wrong="Wrong password!"
# This message is displayed when someone attempts to refer an authenticated player.
error-player-authorized="This player is already authenticated!"
# This message is displayed when someone attempts to refer an unregistered player.
error-player-not-registered="This player is not registered!"
# This message is displayed when someone attempts to refer an offline player.
error-player-offline="This player is offline!"
# This message is displayed when someone attempts to refer an online player.
error-player-online="This player is online!"
# This message is displayed when the Mojang API is rate limiting us, therefore we cannot verify whether there is an account with the given username.
error-premium-throttled="The Mojang API is rate limiting our server, please try the command again in a while!"
# This message is displayed when there was an unknown issue while communicating with Mojang, therefore we cannot verify whether there is an account with the given username.
# The error will be printed to the console
error-premium-unknown="There was an unknown error while communicating with the mojang API, please check console for further details!"
# This message is displayed when the player tries to send commands too fast.
error-throttle="You are sending commands too fast! Please wait a bit."
# This message is displayed when an unknown error occurs.
error-unknown="An unknown error occurred! Check console for further information."
# This message is displayed when the player uses an unknown command.
error-unknown-command="Unknown command!"
# This message is displayed when someone attempts to refer an unknown user.
error-unknown-user="This user does not exist!"
# This message is displayed when the player tries to verify their email with a wrong verification code.
error-wrong-mail-verify="Wrong verification code!"
# This message is displayed when the player tries to reset their password with a wrong password reset code.
error-wrong-password-reset="Wrong password reset code!"
# This message is displayed when the player executes /librelogin about.
# !! Clearing this message, or somehow making the command unexecutable is not only cringe, but also considered a violation of the license. !!
info-about="This server is running FOSS authentication plugin, LibreLogin.\nVersion: %version%\nAuthors: kyngs, and other contributors\nSource: https://github.com/kyngs/LibreLogin\nLicense: Mozilla Public License 2.0"
# This message is displayed when the player has alts.
info-alts="There are %count% players with the same IP address:"
# This message is displayed when the player has alts.
info-alts-entry="- %name% (last seen: %last_seen%)"
# This message is displayed when something has been deleted.
info-deleted="Deleted!"
# This message is displayed when something is being deleted.
info-deleting="Deleting..."
# This message is displayed when something is disabling.
info-disabling="Disabling..."
# This message is displayed when a user executes /librelogin dump.
info-dumped="Dump saved to %file%!"
# This message is displayed when a user executes /librelogin dump.
info-dumping="Creating dump..."
# This message is displayed when something has been edited.
info-edited="Edited!"
# This message is displayed when something is being edited.
info-editing="Editing..."
# This message is displayed when something is enabling.
info-enabling="Enabling..."
# This message is displayed when the player is kicked from a server.
info-kick="You have been kicked from the server for the following reason: %reason%"
# This message is displayed when the player logs in.
info-logged-in="Logged in!"
# This message is displayed when the player attempts to log in.
info-logging-in="Logging in..."
# This message is displayed when the user executes a command that sends an email.
info-mail-sending="Sending email..."
# This message is displayed when the user verifies their email.
info-mail-verified="Email verified! You can now reset your password if you forget it."
# This message is displayed when the player has no alts.
info-no-alts="There are no other players with the same IP address."
# This message is displayed when the player resets their password.
info-password-reset="Password reset! You can now log in with your new password."
# This message is displayed when the player logs in automatically because they have enabled /premium.
info-premium-logged-in="You have been logged in automatically!"
# This message is displayed when the player registers.
info-registered="Registered!"
# This message is displayed when the player attempts to register.
info-registering="Registering..."
# This message is displayed when something has been reloaded.
info-reloaded="Reloaded!"
# This message is displayed when something is being reloaded.
info-reloading="Reloading..."
# This message is displayed when the user executes a command that sends a reset email.
info-reset-password-mail-sent="Password reset email sent! If you don't see anything in your inbox, check your spam folder. You have 10 minutes to reset your password."
# This message is displayed when the player attempts to reset their password.
info-resetting-password="Resetting password..."
# This message is displayed when the user executes a command that sends an email.
info-sending-email="Sending email..."
# This message is displayed when the user executes a command that sends an email.
info-sent-email="Email sent!"
# This message is displayed when the player logs in automatically because of a valid session.
info-session-logged-in="You have been logged in automatically!"
# This message is displayed when the player's information is requested.
info-user="UUID: %uuid%\nPremium UUID: %premium_uuid%\nLast Seen: %last_seen%\nJoined: %joined%\n2FA: %2fa%\nEMail: %email%\nIP: %ip%\nLast Authenticated: %last_authenticated%"
# This message is displayed when the user executes a command that sends a verification email.
info-verification-mail-sent="Verification email sent! If you don't see anything in your inbox, check your spam folder. You have 10 minutes to verify your email."
# This message is displayed when the player enables 2FA.
kick-2fa-enabled="Two-factor has been enabled! Please reconnect."
# This message is displayed when the player is already connected, but tries to join from another location.
kick-already-connected="You are already connected!"
# This message is displayed when the player is kicked because they authorize with wrong password.
kick-error-password-wrong="Wrong password!"
# This message is displayed when the player's username is not allowed.
# See https://github.com/kyngs/LibreLogin/wiki/Name-Validation for more information.
kick-illegal-username="You have illegal characters in your username or/and your username is longer than 16 characters!"
# This message is displayed when the player's username is not in the correct case.
# See https://github.com/kyngs/LibreLogin/wiki/Name-Validation for more information.
kick-invalid-case-username="Please, change your username to &c%username%"
# This message is displayed when the player's IP has reached the maximum amount of accounts.
# See the configuration key "ip-limit" for more information.
kick-ip-limit="You have reached the maximum amount of accounts per IP!"
# This occurs, when there is a profile conflict.
# See https://github.com/kyngs/LibreLogin/wiki/Profile-Conflicts for more information.
kick-name-mismatch="Oh no! It looks like an premium user with activated auto login changed their nickname to %nickname%, therefore there are 2 colliding accounts. Please contact support immediately."
# This message is displayed when the player is kicked because there is not any limbo available.
kick-no-limbo="There's no available limbo to connect you to. Please try again later. If you're the server administrator, please install NanoLimboPlugin."
# This message is displayed when the player is kicked because there is not any server available.
kick-no-lobby="There's no available lobby to connect you to. Please try again later."
# This message is displayed when the player's username is already taken.
kick-occupied-username="Please, change your username to &c%username%"
# This message is displayed when the Mojang API is rate limiting us, therefore we cannot verify whether there is an account with the given username.
kick-premium-error-throttled="The Mojang API is rate limiting our server, please try joining again in a while!"
# This message is displayed when there was an unknown issue while communicating with Mojang, therefore we cannot verify whether there is an account with the given username.
# The error will be printed to the console
kick-premium-error-undefined="There was some issue while communicating with Mojang, if the problem persists, contact the server administrators!"
# This message is displayed when the player disables autologin, they need to be kicked.
kick-premium-info-disabled="Autologin disabled!"
# This message is displayed when the player enables autologin, they need to be kicked.
kick-premium-info-enabled="Autologin enabled!"
# This message is displayed when the player's username is too short.
# See the configuration key "minimum-username-length" for more information.
kick-short-username="Your username is too short! The minimum length is %length% letters."
# This message is displayed when the player takes too long to authorize. (You can specify this time limit in the config file)
kick-time-limit="You took too long to authorize!"
# This message is displayed when the player is prompted to confirm autologin.
prompt-confirm="You are about to enable premium autologin, please take note, that you &4WILL NOT&r be able to connect to your account from cracked client. You can turn this off later by using /cracked. To confirm this action, you have 5 minutes to run /confirmpremium"
# This message is displayed when the player is prompted to login.
prompt-login="Please login using: &e/login &b<password> [2fa_code]"
# This message is displayed when the player is prompted to register.
prompt-register="Please register using: &e/register &b<password> <password>"
# The config revision number. !!DO NOT TOUCH THIS!!
revision=3
# This subtitle is displayed when the player is prompted to login. Make sure that you have use-titles set to true in the configuration.
sub-title-login="&e/login &b<password>"
# This subtitle is displayed when the player is prompted to register. Make sure that you have use-titles set to true in the configuration.
sub-title-register="&e/register &b<password> <password>"
# This section contains syntax for commands. It is pretty large, so most people leave the defaults.
syntax {
# This message is displayed when the player attempts to confirm 2FA with wrong syntax.
"2fa-confirm"="<code>"
# This message is displayed when the player attempts to change password with wrong syntax.
change-password="<oldPassword> <newPassword>"
# This message is displayed when the player attempts to confirm password reset with wrong syntax.
confirm-password-reset="<code> <password> <passwordRepeat>"
# This message is displayed when the player attempts to test email with wrong syntax.
email-test="<address>"
# This message is displayed when the player attempts to login with wrong syntax.
login="<password> [2fa_code]"
# This message is displayed when the player attempts to enable premium autologin with wrong syntax.
premium="<password>"
# This message is displayed when the player attempts to register with wrong syntax.
register="<password> <passwordRepeat>"
# This message is displayed when the player attempts to reset password with wrong syntax.
reset-password=""
# This message is displayed when the player attempts to set email with wrong syntax.
set-email="<address> <password>"
# This message is displayed when the player attempts to disable 2FA for other user with wrong syntax.
user-2fa-off="<name>"
# This message is displayed when the player attempts to get alts of other user with wrong syntax.
user-alts="<name>"
# This message is displayed when the player attempts to disable premium autologin for other user with wrong syntax.
user-cracked="<name>"
# This message is displayed when the player attempts to delete user with wrong syntax.
user-delete="<name>"
# This message is displayed when the player attempts to disable EMail for other user with wrong syntax.
user-email-off="<name>"
# This message is displayed when the player attempts to get user info with wrong syntax.
user-info="<name>"
# This message is displayed when the player attempts to login other user with wrong syntax.
user-login="<name>"
# This message is displayed when the player attempts to migrate user with wrong syntax.
user-migrate="<name> <newName>"
# This message is displayed when the player attempts to change password for other user with wrong syntax.
user-pass-change="<name> <newPassword>"
# This message is displayed when the player attempts to enable premium autologin for other user with wrong syntax.
user-premium="<name>"
# This message is displayed when the player attempts to register other user with wrong syntax.
user-register="<name> <password>"
# This message is displayed when the player attempts to set EMail for other user with wrong syntax.
user-set-email="<name> <email>"
# This message is displayed when the player attempts to unregister user with wrong syntax.
user-unregister="<name>"
# This message is displayed when the player attempts to verify email with wrong syntax.
verify-email="<code>"
}
# This title is displayed when the player is prompted to login. Make sure that you have use-titles set to true in the configuration.
title-login="&6&lLogin"
# This title is displayed when the player is prompted to register. Make sure that you have use-titles set to true in the configuration.
title-register="&6&lRegister"
# This message is displayed when player has begun the 2FA enable procedure.
totp-generating="Generating 2FA code..."
# This message is displayed when the player attempts to finish the 2FA process, but they are not in the process of enabling 2FA.
totp-not-awaiting="You are currently not in the process of enabling 2FA! Please type /2fa to begin the process."
# This message is displayed when the player tries to authorize without providing a 2FA code.
totp-not-provided="You must provide a 2FA code! Use /login <password> <2FA code>, if you lost your code, contact the admins."
# This message is displayed when the player is prompted to scan the 2FA QR code.
totp-show-info="Please scan the QR code on the map into your 2FA app. For example, Google Authenticator or Authy.\nWhen you are complete, please execute the /2faconfirm <code> command to finish the process.\nDisconnect to abort."
# This message is displayed when the player tries to authorize, or finish the 2FA enablement, with a wrong 2FA code.
totp-wrong="Wrong 2FA code!"
# This message is displayed when the player attempts to enable 2FA with an old client.
totp-wrong-version="You must connect with client version %low% - %high%, in order to enable 2FA. You can then connect back with old version again."