✨ ChronGuard | ʙᴜɴɢᴇᴇɢᴜᴀʀᴅ ᴘᴇʀғᴇᴄᴛ ᴀʟᴛᴇʀɴᴀᴛɪᴠᴇ! ✨ icon

✨ ChronGuard | ʙᴜɴɢᴇᴇɢᴜᴀʀᴅ ᴘᴇʀғᴇᴄᴛ ᴀʟᴛᴇʀɴᴀᴛɪᴠᴇ! ✨ -----

⚠︎ Users are allowed to connect when the server is verified with a token! ⚠︎




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
[​IMG]
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.
 
Resource Information
Author:
----------
Total Downloads: 30
First Release: Jun 25, 2025
Last Update: Jun 25, 2025
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings