IF THE PLUGIN GENERATES A TOKEN ON YOUR BUNGEECORD SERVER AND YOU COPY IT INTO THE BACKEND SERVER'S CONFIGURATION, THE BACKEND SERVER WILL BE PROTECTED AGAINST UNAUTHORIZED CONNECTIONS.
V 1.0.2
FOLIA COMPATIBILITY
PAPER PLAYERPROFILE
SPIGOT 1.8 - 1.17.1
OLD GAMEPROFILE
SPIGOT 1.18.1 - 1.21.6
NEW BUKKIT PLAYERPROFILE
PAPER 1.12 - 1.21.6
PAPER PLAYERPROFILE
V 1.0.1
BUNGEECORD CONFIG
Code (YAML):
TOKEN
: cSNA28hdkXelAlssQDxk9ZGrU14UVfAQPxJn34lQN3jcuakoVoEm9dWVMkZv14By
TOKEN_KEY
: chronToken
VERSION
: 1
IP_ADDRESS_COULD_NOT_BE_RESOLVED
: '&cConnection denied
: IP address could not be resolved!'
UNSUPPORTED_CONNECTION_HANDLER
: '&cConnection denied
: unsupported connection handler!'
BACKEND SERVER CONFIG
Code (YAML):
TOKENS
:
- cSNA28hdkXelAlssQDxk9ZGrU14UVfAQPxJn34lQN3jcuakoVoEm9dWVMkZv14By
TOKEN_KEY
: chronToken
NULL_IP_ADDRESS_DETECTED
:
"Null IP address detected!"
TOKEN_LIST_NOT_SET
:
"Token list not set!"
DUPLICATE_TOKEN_SEND
:
"Duplicate token send!"
TOKEN_VALUE_IS_NULL
:
"Token value is null!"
DUPLICATE_USERNAME_SEND
:
"Duplicate username send!"
USERNAME_VALUE_IS_NULL
:
"Username value is null!"
DUPLICATE_UUID_SEND
:
"Duplicate UUID send!"
UUID_VALUE_IS_NULL
:
"UUID value is null!"
DUPLICATE_IP_ADDRESS_SEND
:
"Duplicate IP address send!"
IP_ADDRESS_VALUE_IS_NULL
:
"IP address value is null!"
FAILED_TO_RETRIEVE_GAMEPROFILE_PROPERTIES_VIA_REFLECTION
:
"Failed to retrieve GameProfile properties via reflection!"
NO_TOKEN_SENT
:
"No token sent!"
NO_USERNAME_SENT
:
"No username sent!"
NO_UUID_SENT
:
"No UUID sent!"
NO_IP_ADDRESS_SENT
:
"No IP address sent!"
TOKEN_DOES_NOT_MATCH
:
"Token does not match!"
USERNAME_DOES_NOT_MATCH
:
"Username does not match!"
UUID_DOES_NOT_MATCH
:
"UUID does not match!"
IP_ADDRESS_DOES_NOT_MATCH
:
"IP address does not match!"
UUID_FORMAT_IS_INVALID
:
"UUID format is invalid!"
IP_ADDRESS_FORMAT_IS_INVALID
:
"IP address format is invalid!"
TOKEN_FORMAT_IS_INVALID
:
"Token format is invalid!"
IP_ADDRESS_CANNOT_BE_A_HOSTNAME
:
"IP address cannot be a hostname!"
CUSTOM_KICK
: |-
&r &r
&8【&c✽&8】 &eYou have been kicked from the server! &8【&c✽&8】
&r &r
&b
%reason%
&r &r
&7Join our discord if there's an issue!
&7&o
(https://discord.io/chroncode/
)
&r &r
CUSTOM EVENTS
ON PAPER, FOLIA SERVERS, ASYNCPLAYERPRELOGINEVENT IS AVAILABLE, AND PLAYERLOGINEVENT RETURNS NULL WHEN ACCESSED FROM A CUSTOM EVENT.
ON SPIGOT SERVERS, IT'S THE OPPOSITE — PLAYERLOGINEVENT IS AVAILABLE, AND ASYNCPLAYERPRELOGINEVENT RETURNS NULL IN THE CUSTOM EVENT.
Code (Text):
@EventHandler
public void onVerificationFailed(TokenVerificationFailedEvent event) {
String username = event.getUsername(); // USERNAME FROM THE BACKEND SERVER.
String chronUsername = event.getChronUsername(); // USERNAME FROM THE BUNGEECORD SERVER.
String token = event.getChronToken(); // TOKEN USED FOR VERIFICATION ON THE BUNGEECORD SERVER.
event.getUUID(); // UUID FROM THE BACKEND SERVER.
event.getChronUUID(); // UUID FROM THE BUNGEECORD SERVER.
event.getAddress(); // IP ADDRESS FROM THE BACKEND SERVER.
event.getChronAddress(); // IP ADDRESS FROM THE BUNGEECORD SERVER.
TokenFailureReason reason = event.getFailureReason(); // ENUM INDICATING THE REASON FOR FAILURE.
boolean cancel = event.isCancelled(); // CHECKS IF THE EVENT HAS BEEN CANCELLED.
event.setCancelled(boolean); // SETS THE CANCELLATION STATE OF THE EVENT.
AsyncPlayerPreLoginEvent mainEvent = event.getEventAsynchronously(); // RETRIEVES THE ASYNCHRONOUS PRE-LOGIN EVENT.
PlayerLoginEvent mainEvent = event.getEventSynchronously(); // RETRIEVES THE SYNCHRONOUS LOGIN EVENT.
event.disconnectAsynchronously(Result result, String reason); // DISCONNECTS THE USER ASYNCHRONOUSLY WITH A SPECIFIED RESULT AND REASON.
event.disconnectSynchronously(Result result, String reason); // DISCONNECTS THE USER SYNCHRONOUSLY WITH A SPECIFIED RESULT AND REASON.
}
@EventHandler
public void onVerificationSuccess(TokenVerificationSuccessEvent event) {
String username = event.getUsername(); // THE USERNAME OF THE PLAYER FROM THE BACKEND SERVER.
String uuid = event.getUUID(); // THE UUID (UNIVERSALLY UNIQUE IDENTIFIER) OF THE PLAYER FROM THE BACKEND SERVER.
String address = event.getAddress(); // THE IP ADDRESS OF THE PLAYER FROM THE BACKEND SERVER.
String token = event.getToken(); // THE TOKEN THAT WAS SUCCESSFULLY VERIFIED FOR THE PLAYER.
boolean cancel = event.isCancelled(); // CHECKS IF THE EVENT HAS BEEN CANCELLED.
event.setCancelled(boolean); // SETS THE CANCELLATION STATE OF THE EVENT.
AsyncPlayerPreLoginEvent mainEvent = event.getEventAsynchronously(); // RETRIEVES THE ASYNCHRONOUS PRE-LOGIN EVENT.
PlayerLoginEvent mainEvent = event.getEventSynchronously(); // RETRIEVES THE SYNCHRONOUS LOGIN EVENT.
event.disconnectAsynchronously(Result result, String reason); // DISCONNECTS THE USER ASYNCHRONOUSLY WITH A SPECIFIED RESULT AND REASON.
event.disconnectSynchronously(Result result, String reason); // DISCONNECTS THE USER SYNCHRONOUSLY WITH A SPECIFIED RESULT AND REASON.
}
AddressUtils.getHostAddress(InetAddress); // IT RETRIEVES THE HOST ADDRESS, WHICH IS THE IP ADDRESS IN STRING FORMAT.
Base64Encoder.encodeBase64(String) // STRING ENCRYPTION E.G. TOKEN, IP ADDRESS.