Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for NovaCraft254

A customizable and advanced AntiVPN for your server, protect your server from VPNs and more FREE! ✨

Report FoxGate?

Beta
1.0.5-pre5

NovaCraft254 released FoxGate version 1.0.5-pre5 on January 15, 2025

(showing updates from 1.0.4 -> 1.0.5-pre5) - This version has been launched for public for testing, this seems to be stable, but if you find errors or problems, please, JOIN TO THE DISCORD SUPPORT.

  • Added IPRisk API (unlimited usage).
  • Added FreeIPAPI.
  • Increased max_flags option to 3 for better avoid false flags for the amount of free APIs.
  • Added IPdb-Amelia API (unlimited usage).
  • Disabled SkyDB by default in configuration because their big delay in response.
  • Fixed value to check for VPN in case the API return in array list.
  • Added option to use value with array list. (this feature was added for IPdb-Amelia, for better results)
  • Added reload command for the plugin.
  • Fixed bypass permission.
  • Added auto-complete for add/remove sub-arguments.
  • Fixed Folia support.
  • Implemented a little API for developers.
  • Download their dependencies automatically when the server start, so you can use MySQL and SQLite in Proxy (BungeeCord/Velocity).
  • Added support for MiniMessage.
  • Added support for new databases: MariaDB, PostgreSQL and H2 with HikariCP.
  • Added new command /foxgate db; in this you can purge the database, all saved IP's (/foxgate db purge) and reconnect the database if you applied changes and you don't want restart your server (/foxgate db reconnect).
  • Added new command /foxgate status, with this you can see information from an IP saved in the database.
  • Improved the structure in the config.yml.
  • Updated and fixed some fields in the API.
  • Fixed in Velocity backends, this only detecting IP of host.
  • Fixed a lot of errors in 1.0.4 version.
  • Changed PlayerPreLoginEvent to AsyncPlayerPreLoginEvent for better performance.

New configuration reference:

Spoiler
# ------------------------------------------------------------------------------------------- #
#                           ______           _____         _                                  #
#                           |  ___|         |  __ \       | |                                 #
#                           | |_  ___ __  __| |  \/  __ _ | |_  ___                           #
#                           |  _|/ _ \\ \/ /| | __  / _` || __|/ _ \                          #
#                           | | | (_) |>  < | |_\ \| (_| || |_|  __/                          #
#                           \_|  \___//_/\_\ \____/ \__,_| \__|\___|                          #
#                                                                                             #
#                                       [v1.0.5-pre5]                                         #
#                                                                                             #
# ------------------------------------------------------------------------------------------- #
# If you still has questions, you can join to the discord server in:
# https://discord.com/invite/FTtVXfj or you can use the Discussion page in https://www.spigotmc.org/threads/646308/.

#      ___      _        _
#     /   \__ _| |_ __ _| |__   __ _ ___  ___
#    / /\ / _` | __/ _` | '_ \ / _` / __|/ _ \
#   / /_// (_| | || (_| | |_) | (_| \__ \  __/
#  /___,' \__,_|\__\__,_|_.__/ \__,_|___/\___|

# Configure a database for use.
database:

    # - Available options in type.
    #  |=> MySQL (HikariCP)
    #  |=> MariaDB (HikariCP)
    #  |=> PostgreSQL (HikariCP)
    #  |=> SQLite (HikariCP)
    #  |=> H2 (Unstable)
    #
    # If you change this configuration and your server is already
    # started. You can use the command "/foxgate db reconnect" to
    # apply the changes without restarting plugin or server.
    # Remember first reload the plugin with "/foxgate reload"
    # and use that command.
    type: "sqlite"
    # Edit table in case you want a different.
    # If you want to use your actually stats (of 1.0.5-pre4 or older),
    # use the next:
    # - "vpn_cache"
    table: "foxgate"
    
    # MariaDB/MySQL databases type. Edit here.
    # This uses HikariCP.
    remote:
      # Determine information of your database.
      hostname: "localhost"
      port: 3306
      database: "foxav_db"
      username: "root"
      password: "password123"
      
      # These settings apply to the MySQL/MariaDB connection pool (HikariCP).
      # - Default values are suitable for most users. Only modify these if you know what you're doing!
      pool-settings:

        # The maximum number of connections in the connection pool.
        # - Determines the upper limit of active database connections that can be managed simultaneously.
        # - Setting this too high can overload your database server, while setting it too low can cause delays.
        # Example: 
        #   If your server has high traffic and the database can handle it, set this to 10 or higher.
        # Recommended: 4
        # More information: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
        maximum-pool-size: 4

        # Minimum number of idle connections to maintain in the pool.
        # - The pool will try to maintain this number of idle (inactive) connections ready for use.
        # - Setting this equal to 'maximum-pool-size' creates a fixed-size connection pool,
        #   ensuring consistent resource allocation.
        # Example:
        #   For a server with occasional traffic spikes, set this to half of 'maximum-pool-size'.
        # Recommended: 4
        minimum-idle: 4

        # Maximum lifetime of a connection in the pool, in milliseconds.
        # - Connections older than this value will be closed and replaced.
        # - This prevents stale connections from lingering indefinitely and reduces database timeout issues.
        # - Should be at least 30 seconds less than the timeout imposed by the database itself.
        # Example:
        #   If your database timeout is 30 minutes, set this value to 25 minutes (1500000 ms).
        # Recommended: 1500000 (25 minutes)
        maximum-lifetime: 1500000

        # Frequency of pings to keep the connection alive, in milliseconds.
        # - This prevents connections from being closed due to inactivity (common in many databases or firewalls).
        # - Must be less than 'maximum-lifetime' and greater than 30 seconds (30000 ms).
        # Example:
        #   For long-running servers, a value of 10 minutes (600000 ms) is generally ideal.
        # Recommended: 600000 (10 minutes)
        keepalive-time: 600000

        # The maximum time in milliseconds to wait for a connection from the pool.
        # - If no connection is available within this time, an exception will be thrown.
        # - Setting a low value ensures responsiveness but may cause issues under heavy load.
        # Example:
        #   For responsive applications, a value between 3-5 seconds (3000-5000 ms) is ideal.
        # Recommended: 5000 (5 seconds)
        connection-timeout: 5000

        # Custom validation timeout (time taken to validate a connection), in milliseconds.
        # - Determines how long the pool will wait while testing if a connection is still valid.
        # - A low value improves responsiveness, but setting it too low may cause false negatives.
        # Example:
        #   For most databases, 3 seconds (3000 ms) is sufficient for validation.
        # Recommended: 3000 (3 seconds)
        validation-timeout: 3000
   
      # Custom properties for advanced users.
      # Add any additional properties to fine-tune the connection.
      #
      # You can uncomment unnecesary properties or remove,
      # also edit to values that is perfect for you.
      # (!) THIS PROPERTIES IS BASED WITH SUPPORT
      # MARIADB, IF YOU GET ERROR IN MYSQL, YOU CAN
      # ADAPT OR CONSIDERING TO CHANGE TO MARIADB,
      # THAT WORKS WITH MYSQL DATABASES.
      properties:

        # - SSL.
        # Database connection settings.
        # Adjust these properties to optimize the connection with your MySQL/MariaDB server.
        # Enables or disables SSL for secure connections.
        # It is highly recommended to set this to true if your server supports SSL.
        # Default is false, as many MySQL/MariaDB servers do not support SSL.
        sslMode: "false"
        requireSSL: "false"                   # If set to "true", forces SSL connections. Overrides 'sslMode'.
        verifyServerCertificate: "false"      # Validates the server's SSL certificate. Set to "true" for production.
        # - Connection Optimization
        cachePrepStmts: "true"                # Enables prepared statement caching
        prepStmtCacheSize: "250"              # Number of prepared statements to cache
        prepStmtCacheSqlLimit: "2048"         # Maximum size of a query in the cache
        useServerPrepStmts: "true"            # Uses server-side prepared statements
        # - Performance and Buffering
        rewriteBatchedStatements: "true"      # Optimizes batch insert/update performance
        useCompression: "false"               # Enables compression for data transfer (optional)
        maintainTimeStats: "false"            # Disables time statistics for improved performance
        autoReconnect: "true"                 # Automatically reconnects if the connection is lost
        # - Character Encoding
        # Specifies whether Unicode character encoding should be used.
        # If working with multilingual data, this is highly recommended.
        useUnicode: "true"
        # Defines the character encoding for the database connection.
        # Use "utf8" for compatibility with most character sets.
        characterEncoding: "utf8"
        # - Time Zone
        serverTimezone: "UTC"                 # Ensures consistent timezone handling

    postgresql:
      hostname: "localhost"
      port: 5432
      database: "foxav_db"
      username: "postgres"
      password: "password123"

      # Database connection settings for PostgreSQL.
      settings:

        # Adjust these properties to optimize the connection with your PostgreSQL server.
        # Enables or disables SSL for secure connections.
        # It is highly recommended to set this to true if your server supports SSL.
        # Default is false.
        ssl: false
 
        # The maximum time in seconds to wait for a connection from the pool.
        # Choose a value between 1 and 5 for a balance between availability and performance.
        # Recommended: 3.0
        connectiontimeout: 3.0

        # Specifies whether Unicode character encoding should be used.
        # PostgreSQL natively supports Unicode, so this can be left as true.
        useUnicode: true

        # Defines the character encoding for the database connection.
        # Use "UTF-8" to handle multilingual data and ensure compatibility.
        characterEncoding: "UTF-8"

        # Keeps idle connections alive.
        tcpKeepAlive: true

        # Timeout for socket operations in seconds.
        socketTimeout: 30

        # Number of prepared statement executions before switching to server-side prepared statements.
        prepareThreshold: 5

        # Application name for debugging or monitoring purposes.
        applicationName: "FoxGate"

        # Enables optimized binary transfer for certain data types.
        binaryTransfer: true
      
      # These settings apply to this PostgreSQL, because uses Hikari for connection.
      # - Default values are suitable for most users. Only modify these if you know what you're doing!
      pool-settings:

        # The maximum number of connections in the connection pool.
        # - Determines the upper limit of active database connections that can be managed simultaneously.
        # - Setting this too high can overload your database server, while setting it too low can cause delays.
        # Example: 
        #   If your server has high traffic and the database can handle it, set this to 10 or higher.
        # Recommended: 10
        # More information: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
        maximum-pool-size: 10

        # Minimum number of idle connections to maintain in the pool.
        # - The pool will try to maintain this number of idle (inactive) connections ready for use.
        # - Setting this equal to 'maximum-pool-size' creates a fixed-size connection pool,
        #   ensuring consistent resource allocation.
        # Example:
        #   For a server with occasional traffic spikes, set this to half of 'maximum-pool-size'.
        # Recommended: 2
        minimum-idle: 2

        # Sets the maximum time an idle connection can remain in the pool before being automatically closed.
        # - Connections that remain idle for longer than the configured value will be removed from the pool
        #   and replaced with new connections as needed.
        # - This is useful to free up resources and keep connections "fresh" avoiding possible problems with
        #   stale connections.
        # Recommended: 600000 (10 minutes)
        idle-timeout: 600000

        # Maximum lifetime of a connection in the pool, in milliseconds.
        # - Connections older than this value will be closed and replaced.
        # - This prevents stale connections from lingering indefinitely and reduces database timeout issues.
        # - Should be at least 30 seconds less than the timeout imposed by the database itself.
        # Example:
        #   If your database timeout is 30 minutes, set this value to 25 minutes (1500000 ms).
        # Recommended: 1800000 (30 minutes)
        maximum-lifetime: 1800000

        # The maximum time in milliseconds to wait for a connection from the pool.
        # - If no connection is available within this time, an exception will be thrown.
        # - Setting a low value ensures responsiveness but may cause issues under heavy load.
        # Example:
        #   For responsive applications, a value between 30-50 seconds (30000-50000 ms) is ideal.
        # Recommended: 30000 (30 seconds)
        connection-timeout: 30000

    sqlite:
      file: "FoxGate.db"

      # These settings apply to this SQLite, because uses Hikari for connection.
      # - Default values are suitable for most users. Only modify these if you know what you're doing!
      #
      # Yeah... I know HikariCP isn't better to use with SQLite, but is only for avoid any
      # type of errors! Please, don't kill me!
      pool-settings:

        # The maximum number of connections in the connection pool.
        # - Determines the upper limit of active database connections that can be managed simultaneously.
        # - Setting this too high can overload your database server, while setting it too low can cause delays.
        # Example: 
        #   If your server has high traffic and the database can handle it, set this to 10 or higher.
        # Recommended: 5
        # More information: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
        maximum-pool-size: 5

        # Minimum number of idle connections to maintain in the pool.
        # - The pool will try to maintain this number of idle (inactive) connections ready for use.
        # - Setting this equal to 'maximum-pool-size' creates a fixed-size connection pool,
        #   ensuring consistent resource allocation.
        # Example:
        #   For a server with occasional traffic spikes, set this to half of 'maximum-pool-size'.
        # Recommended: 1
        minimum-idle: 1

        # Maximum lifetime of a connection in the pool, in milliseconds.
        # - Connections older than this value will be closed and replaced.
        # - This prevents stale connections from lingering indefinitely and reduces database timeout issues.
        # - Should be at least 30 seconds less than the timeout imposed by the database itself.
        # Example:
        #   If your database timeout is 30 minutes, set this value to 25 minutes (1500000 ms).
        # Recommended: 1800000 (30 minutes)
        maximum-lifetime: 1800000

        # The maximum time in milliseconds to wait for a connection from the pool.
        # - If no connection is available within this time, an exception will be thrown.
        # - Setting a low value ensures responsiveness but may cause issues under heavy load.
        # Example:
        #   For responsive applications, a value between 30-50 seconds (30000-50000 ms) is ideal.
        # Recommended: 30000 (30 seconds)
        connection-timeout: 30000

    # This is too unstable for the moment.
    h2:
      file: "h2db"

    # When an IP isn't detected a vpn or proxy, this need to save in
    # cache to don't make more requests for a little time for save
    # performance and requests, customizable here.
    bypass:
        # Enable this feature?
        enable: true

        # Determine the amount in hours to save the IP in cache and avoid
        # make more requests to this IP. Useful to save performance and
        # verify only one time for certain time.
        #
        # Recommended: 2
        expiration_time: 2

    # When an IP is detected in a result, this is save in the cache
    # to don't make more request for a little time, this value is
    # saved in hours.
    #
    # Recommended: 36
    expiration_time: 36

#     ___             __ _                       _   _             
#    / __\___  _ __  / _(_) __ _ _   _ _ __ __ _| |_(_) ___  _ __  
#   / /  / _ \| '_ \| |_| |/ _` | | | | '__/ _` | __| |/ _ \| '_ \ 
#  / /__| (_) | | | |  _| | (_| | |_| | | | (_| | |_| | (_) | | | |
#  \____/\___/|_| |_|_| |_|\__, |\__,_|_|  \__,_|\__|_|\___/|_| |_|
#                          |___/                                   

# Configure some others little options.
configuration:

   # Allow the usage of Metrics (bStats) in your server?
   # - This is only for stadistics usage, can help to the creator
   #   in view amount of servers that the plugin are using. This
   #   doesn't seems to has any impact in performance.
   metrics: true

   # Print to console?
   # - Enable this to send the equal notification to the console when
   #   a player is flagged.
   console: true

   # Define the permission.
   # - Set here the permission to see the notification in case this
   #   is used in case a player is using VPN. By default, this is one
   #   permission default of the antivpn: 'foxav.notifications'
   permission: 'foxav.notifications'

   # Do you want to enable this feature?
   # - Automatic check new updates in the Spigot page. This only detect
   #   when the server is starting. You need to have connection for check
   #   new updates.
   update: true

#                                            
#    /\/\   ___ ___ ___  __ _  __ _  ___ ___ 
#   /    \ / _ / __/ __|/ _` |/ _` |/ _ / __|
#  / /\/\ |  __\__ \__ | (_| | (_| |  __\__ \
#  \/    \/\___|___|___/\__,_|\__, |\___|___/
#                             |___/          

# πŸ”¨ Configure here the messages to show.
# You can use MiniMessage in this section. This also works with
# legacy bukkit colors, but isn't recommended, because this
# is totally incompatibility!
#
# πŸ“· Viewer:
# https://webui.advntr.dev/
#
# πŸ“š Format:
# https://docs.advntr.dev/minimessage/format.html
message:

   # Message to return when a player is kicked with the option of actions in 'kick', this
   # his useful if you want kick with the plugin and no with command. You can use the
   # placeholders: %PLAYER%, %IP% and %UUID%. Use '\n', '%NL%' or '\nl' for new lines in
   # the message.
   # This doesn't support MiniMessage, sorry. :(
   kick: "&cYou have been disconnected by FoxGate:\n&fVPN or Proxy has been found in your connection!\n\n&7This is an error? &fJoin to our discord server.\n&b&ndiscord.idcteam.xyz"

   # Notification when a player is kicked. You can suppress this with only
   # leave in blank.
   notify: '{prefix} <aqua>{player} <gray>has been detected using VPN and has been removed! <green>({IP})'
   # This only show in console.
   # This can help in debug in case a service is not working correctly.
   # On the end, the plugin already send the message of error. You can
   # suppress this with only leave in blank.
   error: '{prefix} Error while verifying VPN in service "{service}" to {player}: '
   # Determine the prefix to use when a player use a command.
   prefix: '<yellow><bold>FGT</bold></yellow><dark_gray> β–Ί<reset>'
   help:
      verbose: 'Enable/disable verbose mode.'
      add: 'Add a IP to the database.'
      remove: 'Remove a IP from the database.'
      reload: 'Reload configuration file to apply changes.'
      db: 'Purge or reconnect the database.'
      status: 'View information from a cached IP in the database.'
   verbose:
      enable: '{prefix} <green>You enabled the verbose mode.'
      disable: '{prefix} <red>You disabled the verbose mode.'
      no_malicious: '{prefix} <green>[VERBOSE] <aqua>{player} <gray>is not a VPN in service: <green>{service} <dark_gray>({IP})'
      malicious: '{prefix} <red>[VERBOSE] <aqua>{player} <gray>is marked a VPN in service: <green>{service} <dark_gray>({IP})'
      ignored: '{prefix} <yellow>[VERBOSE] <aqua>{player} <gray>has been ignored for whitelist in <green>{type} <dark_gray>({IP})'
   db:
      invalid_usage: '{prefix} Use the command <aqua>/foxgate db <purge/reconnect><reset>.'
      reconnecting: '{prefix} <yellow>Trying to reconnecting the database...'
      reconnect_correctly: '{prefix} <green>The database was reconnected.'
      reconnect_problem: '{prefix} <red>Error while trying to reconnect the database. Check the console.'
      purging: '{prefix} <yellow>Trying to purging the database...'
      purging_correctly: '{prefix} <green>The database has been purged/reseted.'
      purging_problem: '{prefix} <red>Error while trying to purge the database. Check the console.'
   reload:
      message: '{prefix} <green>The configuration file has been reloaded.'
   add-remove:
      invalidip: '{prefix} {IP}<red> is not a valid IP/Username!'
      already: '{prefix} {IP}<red> is already added/removed from the database!'
      add: '{prefix} {IP}<green> has been added to the dabatase!'
      remove: '{prefix} {IP}<green> has been removed from the database!'
   status:
      invalidip: '{prefix} {IP}<red> is not a valid IP!'
      # Here you can find new placeholders only for this message:
      #
      # {DETECTED} - Return only the services that detected that IP has VPN.
      # {UNDETECTED} - Return only the services that doesn't detect that IP is VPN.
      # {LIST} - Return both list, but this difference with color (customizable).
      # {MAX} - Return the number of maxium flags to deny access to the player.
      # {COUNT_DETECTED} - Return the count of services that the player has been detected.
      # {COUNT_UNDETECTED} - Return the count of services that the player doesn't has been detected.
      # {STATUS} - Return the status of the player.
      detected: '<red>'
      undetected: '<green>'
      none: '<red>None.'
      no_cached: '<red>Not cached in database.'
      allow: '<green>Verified.'
      deny: '<red>Blocked.'
      info: " \n <green>Viewing status of <aqua>{IP}\n <dark_gray>β–ͺ <white>Status: {STATUS} <yellow>({COUNT_DETECTED}/{MAX})</yellow>\n    <white>Undetected: <green>{COUNT_UNDETECTED} <dark_gray>❙ <white>Detected: <red>{COUNT_DETECTED} \n <dark_gray>β–ͺ <white>Services: {LIST}\n "

#     _         _   _        ___    __ 
#    /_\  _ __ | |_(_/\   /\/ _ \/\ \ \
#   //_\\| '_ \| __| \ \ / / /_)/  \/ /
#  /  _  | | | | |_| |\ V / ___/ /\  / 
#  \_/ \_|_| |_|\__|_| \_/\/   \_\ \/  
#                                      

# πŸͺ“ Configure and customize VPN detection.
# This section allows you to configure and manage anti-VPN lists, which are used to perform
# checks when players join to determine if they are using a VPN. By default, several anti-VPN
# services are pre-configured for detection purposes.
antivpn:

   # Specify the minimum number of services
   # required to flag a player's IP as a VPN/proxy.
   # - This value must be equal to or less than the
   #   number of enabled/created services.
   max_flags: 3

   # Change userAgent value in case is necessary.
   # Recommended default:
   # - 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11'
   # Or:
   # - 'FoxGate/plugin'
   userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"

   # Determine here the timeout to prevent any
   # type of crash if the API is down, this help
   # a lot in case an API dead or you use a
   # service that is down.
   # Use in milliseconds.
   #
   # (1500ms = 1.5s)
   # (1000ms = 1.0s)
   timeout: 1750

   # Whitelist the detection to this name's.
   # - Allow players in the list to bypass the detection of
   #   the antivpn. To disable this feature, use the value:
   #
   #   whitelist-name: []
   #
   # (!) It's case sensetive!
   whitelist-name:
     - 'ImZowi' # It's me! :3

   # Whitelist the detection to this IP's.
   # - Allow ip's in the list to bypass the detection of
   #   the antivpn. To disable this feature, use the value:
   #
   #   whitelist-ip: []
   #
   # (!) The value under is the default in localhost.
   whitelist-ip:
     - '127.0.0.1'

   # Actions to make when is detected.
   # - Use this to kick with the plugin instantly:
   #
   #   - 'kick'
   #
   #   Or add your custom command. Disable this feature
   #   with only adding 'actions: {}'.
   actions:
     - 'kick'
     #- 'ipban %IP% Trying to access with %PLAYER% using a VPN.'
   
   # List of services.
   # You can create your check antivpn with:
   #
   # 'servicename':
   #    # Enable this service?
   #    enabled: true
   #    # Add this field in case requere key.
   #    key: "KEY"
   #    # Add the model to request the page, this
   #    # use JSON in case is invalid the value or
   #    # is not set.
   #    #
   #    # Supported:
   #    # JSON, HTML
   #    model: "JSON"
   #    # This field is necessary. Insert your
   #    # service URL.
   #    #
   #    # Remember:
   #    # %IP% = Return player's ip.
   #    # %KEY% = Return 'key' field value.
   #    url: "https://example-antivpn.com/check/%IP%?key=%KEY%"
   #    # Headers in case is necessary.
   #    #
   #    # Set to: 'headers: []' to disable or only don't
   #    # add in the settings for this service.
   #    headers:
   #       'Example-header': 'KEY'
   #    # Values to check.
   #    # This equal is necessary to determine.
   #    values:
   #       # Fields to check.
   #       # In case you disable this with adding
   #       # 'fields: {}' to exclude and only get if
   #       # 'type' option contains in the final request.
   #       # This is a example.
   #       fields:
   #       - "vpn"
   #       # Type to determine.
   #       # If this return true/false, use "boolean", in case
   #       # this is string, only put string, example:
   #       #
   #       # type: 'yes'
   #       type: boolean
   services:

      # β›½ IP-API
      # πŸ”— https://ip-api.com/
      #
      # πŸ›’ Details:
      # - Unlimited requests, no key.
      ipapi:
         # Enable this service?
         enabled: true
         # Model request to use.
         model: "JSON"
         # URL.
         url: "http://ip-api.com/json/%IP%?fields=status,message,proxy,hosting,query"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "proxy"
            - "hosting"
            # Type to determine.
            type: boolean

      # β›½ BlackBox
      # πŸ”— https://blackbox.ipinfo.app/
      #
      # πŸ›’ Details:
      # - Unlimited requests, no key.
      blackbox:
         # Enable this service?
         enabled: true
         # Model request to use.
         model: "HTML"
         # URL.
         url: "https://blackbox.ipinfo.app/lookup/%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields: {}
            # Type to determine.
            type: "Y"
            
      # β›½ Rayzs DE
      # πŸ”— https://www.rayzs.de/
      #
      # πŸ›’ Details:
      # - Unlimited requests, no key.
      rayzsde:
         # Enable this service?
         enabled: true
         # Model request to use.
         model: "HTML"
         # URL.
         url: "https://www.rayzs.de/provpn/api/proxy.php/?a=%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields: {}
            # Type to determine.
            type: boolean
           
      # β›½ SkyDB
      # πŸ”— http://ipcheck.skydb.de/
      # WARNING: DISABLED BY DEFAULT BECAUSE THEIR BIG DELAY IN
      # RESPONSE! ENABLE IT IF YOU REALLY WANT THIS.
      #
      # πŸ›’ Details:
      # - Unlimited requests, no key.
      skydb:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # URL.
         url: "http://ipcheck.skydb.de/getinfo?ip=%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "Hosting"
            - "Proxy"
            - "VPN"
            - "TOR"
            # Type to determine.
            type: boolean
                        
      # β›½ FunkeMunky
      # πŸ”— https://funkemunky.cc/
      #
      # πŸ›’ Details:
      # - 20k montly requests, no key.
      # - 150k-2Mo montly requests, paid account.
      # - 200 minutly requests, paid account (unlimited).
      funkemunky:
         # Enable this service?
         enabled: true
         # Model request to use.
         model: "JSON"
         # URL.
         # Use this for paid account:
         # url: "https://funkemunky.cc/vpn?ip=%IP%&license=%KEY%&cached=USE_WEB_CACHE"
         url: "https://funkemunky.cc/vpn?ip=%IP%"
         # Insert your key here.
         # You can use this field in case you
         # has a paid account.
         key: ""
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "proxy"
            - "data_center"
            - "vpn"
            # Type to determine.
            type: boolean
           
      # β›½ IPRisk
      # πŸ”— https://api.iprisk.info/
      #
      # πŸ›’ Details:
      # - Unlimited requests, no key.
      iprisk:
         # Enable this service?
         enabled: true
         # Model request to use.
         model: "JSON"
         # URL.
         url: "https://api.iprisk.info/v1/%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "vpn"
            - "data_center"
            - "open_proxy"
            # Type to determine.
            type: boolean
            
      # β›½ IPdb-Amelia
      # πŸ”— https://ipdb.amelia.fun/
      #
      # πŸ›’ Details:
      # - Unlimited requests, no key.
      amelia:
         # Enable this service?
         enabled: true
         # Model request to use.
         model: "JSON"
         # URL.
         url: "https://ipdb.amelia.fun/query?address=%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "result.types"
            # Type to determine.
            #
            # Amelia provide list of types:
            # https://ipdb.amelia.fun/types
            type: ["3", "4", "6"]
            
      # β›½ IP2LOCATION
      # πŸ”— https://ip2location.io/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://ip2location.io/sign-up
      # 
      # - 500 requests per day, no key, only proxy detection.
      # - 30k montlhy requests, "free" plan, basic vpn detection.
      # - 150k montlhy requests, "starter" plan, basic vpn detection.
      # - 300k montlhy requests, "plus" plan, advanced vpn detection.
      # - 600k montlhy requests, "security" plan, full vpn detection.
      ip2location:
         # Enable this service?
         enabled: true
         # Model request to use.
         model: "JSON"
         # Insert your key here.
         # Don't delete this field!
         #
         # I changed here because if "key" parameters is
         # in the URL, this make like this is trying to
         # use a key. Delete '#' under and delete 'key: ""',
         # remember to replace 'KEY' with your API key.
         #key: "&key=KEY"
         key: ""
         # URL.
         url: "https://api.ip2location.io/?ip=%IP%&format=json%KEY%"
         # Values to check.
         values:
            # Fields to check.
            # "is_proxy" only field if you don't has "Security" plan, the
            # others if you pay 499$ for this...
            fields:
            - "is_proxy"
            - "proxy.is_vpn"
            - "proxy.is_tor"
            - "proxy.is_public_proxy"
            - "proxy.is_web_proxy"
            - "proxy.is_web_crawler"
            - "proxy.is_residential_proxy"
            - "proxy.is_botnet"
            - "proxy.is_spammer"
            - "proxy.is_scanner"
            - "proxy.is_consumer_privacy_network"
            - "proxy.is_enterprise_private_network"
            - "proxy.is_data_center"
            # Type to determine.
            type: boolean
            
      # β›½ FreeIPAPI
      # πŸ”— https://freeipapi.com/
      #
      # πŸ›’ Details:
      # πŸ“ƒ See more information in https://docs.freeipapi.com/request.html#authorization
      # 🏷 Prices and usages: https://freeipapi.com/#pricing
      # πŸ’Ό Login: https://freeipapi.com/register
      #
      # - 60 requests per minute, without key.
      # - Unlimited requests, "premium" plan.
      freeipapi:
         # Enable this service?
         enabled: true
         # Model request to use.
         model: "JSON"
         # Headers in case is necessary.
         #
         # Set to: 'headers: []' to disable.
         #headers:
         #   'Authorization': 'Bearer KEY'
         #
         # Remove comment from above to use key in case
         # you has one.
         headers: []
         # URL.
         url: "https://freeipapi.com/api/json/%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "isProxy"
            # Type to determine.
            type: boolean
            
      # β›½ BanProxy
      # πŸ”— https://www.banproxy.com/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://banproxy.com/panel
      #
      # - 50 minutly requests, free account.
      # - Unlimited requests, paid account.
      banproxy:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Insert your key here.
         # Don't delete this field!
         key: ""
         # URL.
         url: "https://banproxy.com/api/%IP%/%KEY%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "proxy"
            - "hosting"
            # Type to determine.
            type: boolean
            
      # β›½ GetIPIntel
      # πŸ”— https://getipintel.net/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://getipintel.net/free-proxy-vpn-tor-detection-api/#FAQ
      #
      # - 500 requests per day and 15 requests per minute - normal.
      # - Unknowned requests with a "package".
      getipintel:
         # Enable this service?
         # PLEASE, PUT A VALID "EMAIL" LIKE
         # KEY TO USE THIS, OTHERWISE, THIS CAN
         # BLOCK YOU (SOMETIMES, INSTANTLY).
         enabled: false
         # Model request to use.
         model: "JSON"
         # Insert your key here.
         # Don't delete this field!
         # PLEASE, PUT A VALID "EMAIL" LIKE
         # KEY TO USE THIS, OTHERWISE, THIS CAN
         # BLOCK YOU (SOMETIMES, INSTANTLY).
         key: ""
         # URL.
         url: "https://check.getipintel.net/check.php?ip=%IP%&contact=%KEY%&flags=m&format=json"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "result"
            # Type to determine.
            type: '1'
            
      # β›½ VPN-API XYZ
      # πŸ”— https://vpn-api.xyz/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://vpn-api.xyz/dashboard
      # πŸ”‘ Autokey: https://vpn-api.xyz/getkey.php
      # 
      # - Unlimited requests, key required.
      vpn-apixyz:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Insert your key here.
         # Don't delete this field!
         key: ""
         # URL.
         url: "https://vpn-api.xyz/detector?key=%KEY%&host=%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "is_proxy"
            # Type to determine.
            type: boolean
            
      # β›½ VPN Blocker
      # πŸ”— https://vpnblocker.net/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://vpnblocker.net/
      #
      # - 500 montlhy requests, no key/free.
      # - Unlimited requests, paid.
      vpnblocker:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Headers in case is necessary.
         #
         # Set to: 'headers: []' to disable.
         headers:
            'X-API-KEY': 'KEY'
         # URL.
         url: "https://api.vpnblocker.net/v2/json/%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "host-ip"
            # Type to determine.
            type: boolean
         
      # β›½ IPQualityScore
      # πŸ”— https://www.ipqualityscore.com/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://www.ipqualityscore.com/user/dashboard
      # 
      # - 5.000 monthly requests, free account.
      # - 500k monthly requests, "SMB Basic" plan.
      # - 1M monthly requests, "SMB Premium" plan.
      # - 4M monthly requests, "SMB Enhanced" plan.
      # - "CUSTOM" monthly requests, "Enterprise" plan.
      ipqualityscore:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Insert your key here.
         # Don't delete this field!
         key: ""
         # URL.
         url: "https://ipqualityscore.com/api/json/ip/%KEY%/%IP%?strictness=0&allow_public_access_points=true"
         # Values to check.
         values:
            # Fields to check.
            # "bot_status" and "recent_abuse" can probably detect bots, I added for better detection in
            # some services of VPN. If you get false flags of this, delete both values and try.
            fields:
            - "proxy"
            - "vpn"
            - "tor"
            - "bot_status"
            - "recent_abuse"
            # Type to determine.
            type: boolean
   
      # β›½ IDCTeam-API (πŸ‘‘ own API)
      # πŸ”— https://www.idcteam.xyz/discord
      #
      # πŸ›’ Details:
      # πŸ’Ό https://www.idcteam.xyz/profile
      #
      # - 250 hours requests, free account.
      # - Infinite hours requests, paid account.
      idcteam:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # URL.
         url: "https://api.idcteam.xyz/utils/checkip?ip=%IP%&key=%KEY%"
         # Insert your key here.
         # Don't delete this field!
         key: ""
         # Values to check.
         values:
            # Fields to check.
            #
            # πŸ‘‘ Premium feature, in the future, read:
            # (Future plan, for the moment, this can detect bot's and
            # vpn's)
            # This also can prevent some types of bots, if you use
            # a legitimated copy of the plugin (paid), you can join
            # to our discord server and get a key that detects
            # bot's ips, also can unlock a completely feature that
            # prevents requests when an attack on your server
            # occurs.
            fields:
            - "proxy"
            - "bot"
            # Type to determine.
            type: boolean
      
      # β›½ ProxyCheck
      # πŸ”— https://proxycheck.io/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://proxycheck.io/pricing
      # 
      # - 100 daily requests, no key.
      # - 1,000 daily requests, free account.
      # - 10k-512m daily requests, paid account.
      #
      # WARNING! This use 2 requets, why? This use
      # the field 'vpn=3' (3) to check for vpn and proxy,
      # this in the DOCS say this use 2 request instead of
      # 1, but this is because use value '3' to detect
      # better VPNs and proxys. Set to '1' for only
      # check 'VPN' or '2' to only check 'PROXY', and
      # only use 1 request.
      proxycheck:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Insert your key here.
         # Don't delete this field!
         key: ""
         # URL.
         url: "https://proxycheck.io/v2/%IP%?vpn=3&key=%KEY%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "%IP%.proxy"
            - "%IP%.vpn"
            # Type to determine.
            type: "yes"
         
      # β›½ VPNAPI
      # πŸ”— https://vpnapi.io/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://vpnapi.io/signup
      # 
      # - 100 daily requests, no key.
      # - 1,000 daily requests, free account.
      # - 10k-200k daily requests, paid account.
      vpnapi:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Insert your key here.
         # Set empty to don't use one. Don't delete this field!
         key: ""
         # URL.
         url: "https://vpnapi.io/api/%IP%?key=%KEY%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "security.vpn"
            - "security.proxy"
            - "security.tor"
            - "security.relay"
            # Type to determine.
            type: boolean
            
      # β›½ ANTIVPN NET
      # πŸ”— https://www.antivpn.net/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://www.antivpn.net/account/
      # 
      # - 10k requests, free account.
      # - 1M-10M requests, paid account.
      antivpnnet:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Insert your key here.
         # Don't delete this field!
         key: ""
         # URL.
         url: "https://antivpn.net/api/v1/lookup?ip=%IP%&key=%KEY%&format=-json"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "is_proxy"
            # Type to determine.
            type: boolean
            
      # β›½ ANTIVPN IO
      # πŸ”— https://www.antivpn.io/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://dash.antivpn.io/
      # 
      # - 15k mothly requests, free account.
      # - 2M-10M montlhy requests, paid account.
      antivpnio:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Headers in case is necessary.
         #
         # Set to: 'headers: []' to disable.
         # How to get a key here? Easy, when you
         # create a server, this send you a command,
         # you only need to copy the code (key) and
         # replace 'KEY' for that code. REMOVE
         # THE COMMAND NAME AND / WHEN YOU COPY!
         #
         # Example value:
         # 'Bearer XXXXXXXX'
         headers:
            'Authorization': 'Bearer KEY'
         # URL.
         url: "https://connection.antivpn.io/check?ip=%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "VPN"
            # Type to determine.
            type: boolean
            
      # β›½ IPHub
      # πŸ”— https://iphub.info/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://iphub.info/login
      # 
      # - 1,000 daily requests, free account.
      # - 10k-200k daily requests, paid account.
      iphub:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Headers in case is necessary.
         #
         # Set to: 'headers: []' to disable.
         headers:
            'X-Key': 'KEY'
         # URL.
         url: "https://v2.api.iphub.info/ip/%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "block"
            # Type to determine.
            type: '1'
            
      # β›½ IPHunter
      # πŸ”— https://www.iphunter.info/
      #
      # πŸ›’ Details:
      # πŸ’Ό https://www.iphunter.info/user/register
      # 
      # - 1,000 daily requests, free account.
      # - 60k-20M daily requests, paid account.
      iphunter:
         # Enable this service?
         enabled: false
         # Model request to use.
         model: "JSON"
         # Headers in case is necessary.
         #
         # Set to: 'headers: []' to disable.
         headers:
            'X-Key': 'KEY'
         # URL.
         url: "https://www.iphunter.info:8082/v1/ip/%IP%"
         # Values to check.
         values:
            # Fields to check.
            fields:
            - "block"
            # Type to determine.
            type: '1'
            
#     ___                    _
#    / _ \_ __ ___ _ __ ___ (_)_   _ _ __ ___   __/\__
#   / /_)/ '__/ _ \ '_ ` _ \| | | | | '_ ` _ \  \    /
#  / ___/| | |  __/ | | | | | | |_| | | | | | | /_  _\
#  \/    |_|  \___|_| |_| |_|_|\__,_|_| |_| |_|   \/

# Premium features, only available for paid users,
# this is here in case you purchase the premium
# version, so you avoid reset your currently config.yml
premium:

    # Enable the usage of Discord Webhooks to send any alert's or
    # messages if the player is vpn/proxy or if is allowed to connect
    # to the server.
    discord:
        # Enter here the webhook URL, set to empty to
        # disable this feature or add URL of webhook to
        # enable this feature.
        #
        # See https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks
        # for how to use it.
        webhook: ""

        # Customize the messages.
        # Remember! You utilize %NAME% to get the name of the
        # player, %UUID% to get the UUID of the player and
        # %IP% to get the IP of the player.
        embed:

          # Messages when the player is allowed to connect.
          allowed:
            # Determine here the content in the message.
            # Set "" to disable the content.
            content: ""
            # Show thumbnail in the embed.
            # Set "" to disable the content.
            thumbnail: "https://api.tydiumcraft.net/v1/players/skin?uuid=%UUID%&type=avatar"
            # Title of the fields.
            name: "User"
            uuid: "UUID"
            ip: "IP"
            # Determine here the color in decimal.
            color: 5793266

    # Prevent bots from joining to your server if this
    # has any type of attack. This blocks connections and prevent
    # making new requests. Normal players can join when this occurrs.
    #
    # This is based for small servers, if you server is bigger, please,
    # configure better if you can.
    antibot:
        # Enable this feature?
        enable: true
        # Determine the maxium connections per second to start blocking these IP's.
        max: 6
        # Determine the time to continue blocking with this little shield that
        # bots (in seconds).
        timer: 10

        # Buffer
        # Configure here a little buffer to add more seconds if this continue.
        # If you has disabled this feature, the antibot system is disabled only
        # when timer ends. If you enable "buffer", this feature increase the time
        # of the timer to still blocking.
        buffer:
            # Enable this feature?
            enable: true
        # Determine the maxium connections per second to
        # increase more additional seconds to the timer.
        max: 3
        # Dertermine the time to add when "max" is reached
        # and need to increase the timer. Remember, all in seconds.
        add: 5
        # Send to the console all details about the attacks?
        log: true
        # Add this IP's to the vpn list to avoid detection for X hours?
        # (depend on your configuration)
        blacklist: true
        # Block that IP's from pinging the server?
        # THIS FUNCTION REQUIRE PACKETEVENTS!
        pinging: true

        # Deny all.
        # Configure here if you want block any join if still joining bots
        # when reach X amount of joins (this has a count). This automatically
        # blacklist connections for 1 hour, the count of connections is
        # reseted when timer finish.
        denyall:
            # Enable this feature?
            enable: true
        # Determine the maxium connection to block any type of connection
        # to the server (don't allow *ANY* connection from join).
        maxium: 500

        # List of urls with knowned proxies.
        # Add list of proxies to save ips to the database, so this can be used
        # to block connections of bots (the possible) and don't make requests.
        list:
        - "https://tcpshield.com/blocklist.txt"
        - "https://check.torproject.org/torbulkexitlist?ip=1.1.1.1"
        - "https://cinsscore.com/list/ci-badguys.txt"
        - "https://lists.blocklist.de/lists/all.txt"
        - "https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt"
        - "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt"
        - "https://raw.githubusercontent.com/scriptzteam/ProtonVPN-VPN-IPs/main/exit_ips.txt"
        - "https://blocklist.greensnow.co/greensnow.txt"
        - "https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies.txt"
        - "https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/socks4.txt"

THIS UPDATE ONLY WORKS IN BACKEND, PROXY GO TO WILL BE SUPPORTED IN 1.0.5 (FINAL VERSION OF THIS PRE-VERSIONS). ALSO THIS VERSION REQUIRE RESET YOUR CONFIGURATION FILE FOR APPLY ALL NEW CHANGES!

Information

Published onJanuary 15, 2025
Downloads1

Platforms

Paper Paper (1.8-1.21.4)