THIS PLUGIN ENABLES COMMUNICATION BETWEEN PROXY AND BACKEND SERVERS.
THE PLUGIN MUST BE INSTALLED ON EVERY SERVER, BOTH ON THE PROXY AND THE BACKEND SERVERS, ALONG WITH THE API INCLUDED IN THE ZIP FILE!
COPY THE GENERATED TOKEN FROM THE BUNGEECORD OR VELOCITY TOKEN.YML AND PASTE IT INTO THE
TOKENS:
- BUNGEECORD_TOKEN
LIST ON ALL SERVERS IN THIS FORMAT.
THE TOKEN_KEY: IS A STRING, AND IT MUST BE THE SAME ON EVERY SERVER AS WELL!
VERSION: 1.8 - 1.21.8
SUPPORT: SPIGOT, PAPER (+FORK), FOLIA, BUNGEECORD (+FORK), VELOCITY
BUNGEECORD CONFIG
Code (YAML):
TOKEN
: token_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TOKEN_KEY
: chronToken
INVALID_CONNECTION_HANDLER
:
"Invalid connection handler!"
IP_ADDRESS_COULD_NOT_BE_RESOLVED
:
"IP address could not be resolved!"
FAILED_TO_SET_PROPERTIES
:
"Failed to set properties!"
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
BACKEND SERVER CONFIG
Code (YAML):
TOKENS
:
- token_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
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
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.
PlayerLoginEvent mainEvent = event.getEvent(); // RETRIEVES THE LOGIN EVENT.
event.disconnect(Result result, String reason); // DISCONNECTS THE USER 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.
PlayerLoginEvent mainEvent = event.getEvent(); // RETRIEVES THE LOGIN EVENT.
event.disconnect(Result result, String reason); // DISCONNECTS THE USER 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.
BUKKIT METHOD CHRONAPI:
ChronProperty props = Properties.getChronProperties(); throws ProfileResolveException // GET GAMEPROFILE PROPERTIES!
BUNGEECORD METHOD CHRONAPI:
Info info = SpoofedLoginResult.setGameProfileProperties(PendingConnection, ChronProperty...); // SET GAMEPROFILE PROPERTIES!