diff --git a/.env.example b/.env.example new file mode 100755 index 0000000..7c4a619 --- /dev/null +++ b/.env.example @@ -0,0 +1,14 @@ +UID=500 +GID=500 + +RCON_PASSWORD=ChangeMe + +FORWARDING_SECRET=ChangeMe + +DCLINK_GUILD=0000000000000000000 +DCLINK_CHANNEL=0000000000000000000 +DCLINK_ROLE=0000000000000000000 +DCLINK_TOKEN=InsertBotTokenHere + +LUCKPERMS_DB_PASSWORD=ChangeMe + diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..1092767 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Ignore the .git directory when using `tree --gitignore -a`. +/.git + +# Ignore environment variable files containing secrets. +/.env + +# Docker volumes +/velocity/data/* +/luckperms/data/* + +!/**/.keep diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100755 index 0000000..c970ffb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,107 @@ +services: + velocity: + image: itzg/mc-proxy:java21-2025.1.0 + container_name: illegal_crime_velocity + user: "${UID}:${GID}" + restart: unless-stopped + depends_on: + luckperms_db: + condition: service_healthy + restart: true + secrets: + - rcon_password + - forwarding_secret + - dclink_guild + - dclink_channel + - dclink_role + - dclink_token + - luckperms_db_password + networks: + illegal_crime_mc_network: + ipv4_address: "10.100.1.3" + ports: + - 25565:25565/tcp + volumes: + - ./velocity/data:/server:rw + - ./velocity/config:/config:ro + environment: + TYPE: VELOCITY + SERVER_NAME: Illegal Crime + MINECRAFT_VERSION: "1.21.3" + INIT_MEMORY: 512m + MAX_MEMORY: 1G + + REPLACE_ENV_VARIABLES: true + ENV_VARIABLE_PREFIX: CFG_ + + ENABLE_RCON: true + RCON_PORT: 25575 + RCON_PASSWORD_FILE: /run/secrets/rcon_password + CFG_RCON_PASSWORD_FILE: /run/secrets/rcon_password + + CFG_DCLINK_GUILD_FILE: /run/secrets/dclink_guild + CFG_DCLINK_CHANNEL_FILE: /run/secrets/dclink_channel + CFG_DCLINK_ROLE_FILE: /run/secrets/dclink_role + CFG_DCLINK_TOKEN_FILE: /run/secrets/dclink_token + + CFG_LUCKPERMS_DB_PASSWORD_FILE: /run/secrets/luckperms_db_password + + PLUGINS: | + https://github.com/dbkynd-minecraft/VelocityPlayerList/releases/download/v1.0/PlayerList-1.0.jar + MODRINTH_PROJECTS: | + dclink:EjvGsLkv + luckperms:vtXGoeps + signedvelocity:Jp1p9BHR + velocitab:TTtLPunq + + luckperms_db: + image: postgres:17.4 + container_name: illegal_crime_luckperms_db + user: "${UID}:${GID}" + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pg_isready -U luckperms -d luckperms"] + interval: 10s + retries: 5 + start_period: 30s + timeout: 10s + secrets: + - luckperms_db_password + networks: + illegal_crime_mc_network: + ipv4_address: "10.100.1.2" + volumes: + - /etc/passwd:/etc/passwd:ro + - ./luckperms/data:/var/lib/postgresql/data:rw + environment: + POSTGRES_PASSWORD_FILE: /run/secrets/luckperms_db_password + POSTGRES_USER: luckperms + POSTGRES_DB: luckperms + PGDATA: /var/lib/postgresql/data/pgdata + +secrets: + rcon_password: + environment: RCON_PASSWORD + forwarding_secret: + environment: FORWARDING_SECRET + dclink_guild: + environment: DCLINK_GUILD + dclink_channel: + environment: DCLINK_CHANNEL + dclink_role: + environment: DCLINK_ROLE + dclink_token: + environment: DCLINK_TOKEN + luckperms_db_password: + environment: LUCKPERMS_DB_PASSWORD + +networks: + illegal_crime_mc_network: + name: illegal_crime_mc_network + driver: bridge + ipam: + driver: default + config: + - subnet: "10.100.1.0/24" + gateway: "10.100.1.1" + diff --git a/luckperms/data/.keep b/luckperms/data/.keep new file mode 100755 index 0000000..e69de29 diff --git a/velocity/config/plugins/bStats/config.txt b/velocity/config/plugins/bStats/config.txt new file mode 100755 index 0000000..b0e3f4f --- /dev/null +++ b/velocity/config/plugins/bStats/config.txt @@ -0,0 +1,10 @@ +# bStats (https://bStats.org) collects some basic information for plugin authors, like +# how many people use their plugin and their total player count. It's recommended to keep +# bStats enabled, but if you're not comfortable with this, you can turn this setting off. +# There is no performance penalty associated with having metrics enabled, and data sent to +# bStats is fully anonymous. +enabled=false +server-uuid=e10a1790-1b24-4c97-8397-4231345aef9b +log-errors=false +log-sent-data=false +log-response-status-text=false diff --git a/velocity/config/plugins/dclink-velocity/dclink.conf b/velocity/config/plugins/dclink-velocity/dclink.conf new file mode 100755 index 0000000..46d41a4 --- /dev/null +++ b/velocity/config/plugins/dclink-velocity/dclink.conf @@ -0,0 +1,24 @@ +database { + # The Sqlite database filename + sqlite-file="dclink.db" +} +discord { + # Guild ID of the Guild where the bot will run + guild="${CFG_DCLINK_GUILD}" + # Channel ID of the channel where the bot will send the message with the button to link their account + link-channel="${CFG_DCLINK_CHANNEL}" + # Role ID of the role that the bot will give to the linked players (If left blank, the bot will not give any roles) + link-role="${CFG_DCLINK_ROLE}" + # Message to show on the bot's status + status-message=Minecraft + # Bot Token (see https://discord.com/developers/applications) + token="${CFG_DCLINK_TOKEN}" +} +linking { + # Limit of Bedrock Edition accounts that can be linked to one Discord account. Requires Floodgate to be installed + bedrock-limit=100 + # Limit of Java Edition accounts that can be linked to one Discord account + java-limit=100 + # If true, the player needs to be linked before they can join the server + link-required=true +} diff --git a/velocity/config/plugins/dclink-velocity/messages.conf b/velocity/config/plugins/dclink-velocity/messages.conf new file mode 100755 index 0000000..dd135a3 --- /dev/null +++ b/velocity/config/plugins/dclink-velocity/messages.conf @@ -0,0 +1,26 @@ +discord { + accept=Accept + add="Link Account" + already-linked="You are already linked to this account." + decline=Decline + generic-link-error="An error occurred while linking your accounts. Contact the server administrator if this problem persists." + info-channel="Press the button below to link your account." + max-bedrock="You can't link any more Bedrock accounts." + max-java="You can't link any more Java accounts." + modal-input-description="Enter link code" + modal-title="Account Linker" + rules="Accept the following rules in order to link your account!\nRules:\nNO griefing\nBe nice\nNO crime" + rules-accepted="You have accepted the rules! Your account is now linked." + rules-denied="You have denied the rules." + wrong-code="The code you entered is incorrect." +} +minecraft { + alts-command="Alts: " + db-error="An error occurred while accessing the database. Please try again later." + discord-command="Name: \">" + kick-unlinked="You have been kicked because your Discord account is no longer linked." + link-code-message="Your Linking Code is: " + needs-argument-if-executed-by-console="This command needs an argument if executed by console." + not-linked="Not Linked" + un-link-command="Unlinked " +} diff --git a/velocity/config/plugins/luckperms/config.yml b/velocity/config/plugins/luckperms/config.yml new file mode 100755 index 0000000..a8f89e2 --- /dev/null +++ b/velocity/config/plugins/luckperms/config.yml @@ -0,0 +1,584 @@ +#################################################################################################### +# +----------------------------------------------------------------------------------------------+ # +# | __ __ ___ __ __ | # +# | | | | / ` |__/ |__) |__ |__) |\/| /__` | # +# | |___ \__/ \__, | \ | |___ | \ | | .__/ | # +# | | # +# | https://luckperms.net | # +# | | # +# | WIKI: https://luckperms.net/wiki | # +# | DISCORD: https://discord.gg/luckperms | # +# | BUG REPORTS: https://github.com/LuckPerms/LuckPerms/issues | # +# | | # +# | Each option in this file is documented and explained here: | # +# | ==> https://luckperms.net/wiki/Configuration | # +# | | # +# | New options are not added to this file automatically. Default values are used if an | # +# | option cannot be found. The latest config versions can be obtained at the link above. | # +# +----------------------------------------------------------------------------------------------+ # +#################################################################################################### + +# +----------------------------------------------------------------------------------------------+ # +# | | # +# | ESSENTIAL SETTINGS | # +# | | # +# | Important settings that control how LuckPerms functions. | # +# | | # +# +----------------------------------------------------------------------------------------------+ # + +# The name of the server, used for server specific permissions. +# +# - When set to "global" this setting is effectively ignored. +# - In all other cases, the value here is added to all players in a "server" context. +# - See: https://luckperms.net/wiki/Context +server: velocity + +# +----------------------------------------------------------------------------------------------+ # +# | | # +# | STORAGE SETTINGS | # +# | | # +# | Controls which storage method LuckPerms will use to store data. | # +# | | # +# +----------------------------------------------------------------------------------------------+ # + +# How the plugin should store data +# +# - The various options are explained in more detail on the wiki: +# https://luckperms.net/wiki/Storage-types +# +# - Possible options: +# +# | Remote databases - require connection information to be configured below +# |=> MySQL +# |=> MariaDB (preferred over MySQL) +# |=> PostgreSQL +# |=> MongoDB +# +# | Flatfile/local database - don't require any extra configuration +# |=> H2 (preferred over SQLite) +# |=> SQLite +# +# | Readable & editable text files - don't require any extra configuration +# |=> YAML (.yml files) +# |=> JSON (.json files) +# |=> HOCON (.conf files) +# |=> TOML (.toml files) +# | +# | By default, user, group and track data is separated into different files. Data can be combined +# | and all stored in the same file by switching to a combined storage variant. +# | Just add '-combined' to the end of the storage-method, e.g. 'yaml-combined' +# +# - A H2 database is the default option. +# - If you want to edit data manually in "traditional" storage files, we suggest using YAML. +storage-method: PostgreSQL + +# The following block defines the settings for remote database storage methods. +# +# - You don't need to touch any of the settings here if you're using a local storage method! +# - The connection detail options are shared between all remote storage types. +data: + + # Define the address and port for the database. + # - The standard DB engine port is used by default + # (MySQL: 3306, PostgreSQL: 5432, MongoDB: 27017) + # - Specify as "host:port" if differs + address: 10.100.1.2 + + # The name of the database to store LuckPerms data in. + # - This must be created already. Don't worry about this setting if you're using MongoDB. + database: luckperms + + # Credentials for the database. + username: luckperms + password: '${CFG_LUCKPERMS_DB_PASSWORD}' + + # These settings apply to the MySQL connection pool. + # - The default values will be suitable for the majority of users. + # - Do not change these settings unless you know what you're doing! + pool-settings: + + # Sets the maximum size of the MySQL connection pool. + # - Basically this value will determine the maximum number of actual + # connections to the database backend. + # - More information about determining the size of connection pools can be found here: + # https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing + maximum-pool-size: 10 + + # Sets the minimum number of idle connections that the pool will try to maintain. + # - For maximum performance and responsiveness to spike demands, it is recommended to not set + # this value and instead allow the pool to act as a fixed size connection pool. + # (set this value to the same as 'maximum-pool-size') + minimum-idle: 10 + + # This setting controls the maximum lifetime of a connection in the pool in milliseconds. + # - The value should be at least 30 seconds less than any database or infrastructure imposed + # connection time limit. + maximum-lifetime: 1800000 # 30 minutes + + # This setting controls how frequently the pool will 'ping' a connection in order to prevent it + # from being timed out by the database or network infrastructure, measured in milliseconds. + # - The value should be less than maximum-lifetime and greater than 30000 (30 seconds). + # - Setting the value to zero will disable the keepalive functionality. + keepalive-time: 0 + + # This setting controls the maximum number of milliseconds that the plugin will wait for a + # connection from the pool, before timing out. + connection-timeout: 5000 # 5 seconds + + # This setting allows you to define extra properties for connections. + # + # By default, the following options are set to enable utf8 encoding. (you may need to remove + # these if you are using PostgreSQL) + # useUnicode: true + # characterEncoding: utf8 + # + # You can also use this section to disable SSL connections, by uncommenting the 'useSSL' and + # 'verifyServerCertificate' options below. + properties: + useUnicode: true + characterEncoding: utf8 + #useSSL: false + #verifyServerCertificate: false + + # The prefix for all LuckPerms SQL tables. + # + # - This only applies for remote SQL storage types (MySQL, MariaDB, etc). + # - Change this if you want to use different tables for different servers. + table-prefix: 'luckperms_' + + # The prefix to use for all LuckPerms MongoDB collections. + # + # - This only applies for the MongoDB storage type. + # - Change this if you want to use different collections for different servers. The default is no + # prefix. + mongodb-collection-prefix: '' + + # The connection string URI to use to connect to the MongoDB instance. + # + # - When configured, this setting will override anything defined in the address, database, + # username or password fields above. + # - If you have a connection string that starts with 'mongodb://' or 'mongodb+srv://', enter it + # below. + # - For more information, please see https://docs.mongodb.com/manual/reference/connection-string/ + mongodb-connection-uri: '' + +# Define settings for a "split" storage setup. +# +# - This allows you to define a storage method for each type of data. +# - The connection options above still have to be correct for each type here. +split-storage: + # Don't touch this if you don't want to use split storage! + enabled: false + methods: + # These options don't need to be modified if split storage isn't enabled. + user: h2 + group: h2 + track: h2 + uuid: h2 + log: h2 + +# +----------------------------------------------------------------------------------------------+ # +# | | # +# | UPDATE PROPAGATION & MESSAGING SERVICE | # +# | | # +# | Controls the ways in which LuckPerms will sync data & notify other servers of changes. | # +# | These options are documented on greater detail on the wiki under "Instant Updates". | # +# | | # +# +----------------------------------------------------------------------------------------------+ # + +# This option controls how frequently LuckPerms will perform a sync task. +# +# - A sync task will refresh all data from the storage, and ensure that the most up-to-date data is +# being used by the plugin. +# - This is disabled by default, as most users will not need it. However, if you're using a remote +# storage type without a messaging service setup, you may wish to set this to something like 3. +# - Set to -1 to disable the task completely. +sync-minutes: -1 + +# If the file watcher should be enabled. +# +# - When using a file-based storage type, LuckPerms can monitor the data files for changes, and +# automatically update when changes are detected. +# - If you don't want this feature to be active, set this option to false. +watch-files: true + +# Define which messaging service should be used by the plugin. +# +# - If enabled and configured, LuckPerms will use the messaging service to inform other connected +# servers of changes. +# - Use the command "/lp networksync" to manually push changes. +# - Data is NOT stored using this service. It is only used as a messaging platform. +# +# - If you decide to enable this feature, you should set "sync-minutes" to -1, as there is no need +# for LuckPerms to poll the database for changes. +# +# - Possible options: +# => sql Uses the SQL database to form a queue system for communication. Will only work +# when 'storage-method' is set to MySQL or MariaDB. This is chosen by default if +# the option is set to 'auto' and SQL storage is in use. Set to 'notsql' to +# disable this. +# => pluginmsg Uses the plugin messaging channels to communicate with the proxy. +# LuckPerms must be installed on your proxy & all connected servers backend +# servers. Won't work if you have more than one Velocity proxy. +# => redis Uses Redis pub-sub to push changes. Your server connection info must be +# configured below. +# => rabbitmq Uses RabbitMQ pub-sub to push changes. Your server connection info must be +# configured below. +# => nats Uses Nats pub-sub to push changes. Your server connection info must be +# configured below. +# => custom Uses a messaging service provided using the LuckPerms API. +# => auto Attempts to automatically setup a messaging service using redis or sql. +messaging-service: auto + +# If LuckPerms should automatically push updates after a change has been made with a command. +auto-push-updates: true + +# If LuckPerms should push logging entries to connected servers via the messaging service. +push-log-entries: true + +# If LuckPerms should broadcast received logging entries to players on this platform. +# +# - If you have LuckPerms installed on your backend servers as well as a Velocity proxy, you +# should set this option to false on either your backends or your proxies, to avoid players being +# messaged twice about log entries. +broadcast-received-log-entries: false + +# Settings for Redis. +# Port 6379 is used by default; set address to "host:port" if differs +# Multiple Redis nodes can be specified in the same format as a string list under the name "addresses". +redis: + enabled: false + address: localhost + username: '' + password: '' + +# Settings for Nats. +# Port 4222 is used by default; set address to "host:port" if differs +nats: + enabled: false + address: localhost + username: '' + password: '' + +# Settings for RabbitMQ. +# Port 5672 is used by default; set address to "host:port" if differs +rabbitmq: + enabled: false + address: localhost + vhost: '/' + username: 'guest' + password: 'guest' + +# +----------------------------------------------------------------------------------------------+ # +# | | # +# | CUSTOMIZATION SETTINGS | # +# | | # +# | Settings that allow admins to customize the way LuckPerms operates. | # +# | | # +# +----------------------------------------------------------------------------------------------+ # + +# If LuckPerms should ensure all players have permission data when they connect to the server. +# +# - When set to true, LuckPerms will cancel login attempts if it is unable to load permissions data +# for a user, or if the storage provider is unavailable. +# - When set to false, LuckPerms will allow a player to connect regardless of whether their +# permissions data could be loaded. +# - This option does not exist on other platforms, and effectively defaults to true - however, +# the option is provided on Velocity, as it is less likely to be so dependant on permissions. +cancel-failed-logins: false + +# Controls how temporary permissions/parents/meta should be accumulated. +# +# - The default behaviour is "deny". +# - This behaviour can also be specified when the command is executed. See the command usage +# documentation for more info. +# +# - Possible options: +# => accumulate durations will be added to the existing expiry time +# => replace durations will be replaced if the new duration is later than the current +# expiration +# => deny the command will just fail if you try to add another node with the same expiry +temporary-add-behaviour: deny + +# Controls how LuckPerms will determine a users "primary" group. +# +# - The meaning and influence of "primary groups" are explained in detail on the wiki. +# - The preferred approach is to let LuckPerms automatically determine a users primary group +# based on the relative weight of their parent groups. +# +# - Possible options: +# => stored use the value stored against the users record in the file/database +# => parents-by-weight just use the users most highly weighted parent +# => all-parents-by-weight same as above, but calculates based upon all parents inherited from +# both directly and indirectly +primary-group-calculation: parents-by-weight + +# If the plugin should check for "extra" permissions with users run LP commands. +# +# - These extra permissions allow finer control over what users can do with each command, and who +# they have access to edit. +# - The nature of the checks are documented on the wiki under "Argument based command permissions". +# - Argument based permissions are *not* static, unlike the 'base' permissions, and will depend upon +# the arguments given within the command. +argument-based-command-permissions: false + +# If the plugin should check whether senders are a member of a given group before they're able to +# edit the groups data or add/remove other users to/from it. +# Note: these limitations do not apply to the web editor! +require-sender-group-membership-to-modify: false + +# If the plugin should send log notifications to users whenever permissions are modified. +# +# - Notifications are only sent to those with the appropriate permission to receive them +# - They can also be temporarily enabled/disabled on a per-user basis using +# '/lp log notify ' +log-notify: true + +# Defines a list of log entries which should not be sent as notifications to users. +# +# - Each entry in the list is a RegEx expression which is matched against the log entry description. +log-notify-filtered-descriptions: +# - "parent add example" + +# If LuckPerms should automatically install translation bundles and periodically update them. +auto-install-translations: true + +# Defines the options for prefix and suffix stacking. +# +# - The feature allows you to display multiple prefixes or suffixes alongside a players username in +# chat. +# - It is explained and documented in more detail on the wiki under "Prefix & Suffix Stacking". +# +# - The options are divided into separate sections for prefixes and suffixes. +# - The 'duplicates' setting refers to how duplicate elements are handled. Can be 'retain-all', +# 'first-only' or 'last-only'. +# - The value of 'start-spacer' is included at the start of the resultant prefix/suffix. +# - The value of 'end-spacer' is included at the end of the resultant prefix/suffix. +# - The value of 'middle-spacer' is included between each element in the resultant prefix/suffix. +# +# - Possible format options: +# => highest Selects the value with the highest weight, from all values +# held by or inherited by the player. +# +# => lowest Same as above, except takes the one with the lowest weight. +# +# => highest_own Selects the value with the highest weight, but will not +# accept any inherited values. +# +# => lowest_own Same as above, except takes the value with the lowest weight. +# +# => highest_inherited Selects the value with the highest weight, but will only +# accept inherited values. +# +# => lowest_inherited Same as above, except takes the value with the lowest weight. +# +# => highest_on_track_ Selects the value with the highest weight, but only if the +# value was inherited from a group on the given track. +# +# => lowest_on_track_ Same as above, except takes the value with the lowest weight. +# +# => highest_not_on_track_ Selects the value with the highest weight, but only if the +# value was inherited from a group not on the given track. +# +# => lowest_not_on_track_ Same as above, except takes the value with the lowest weight. +# +# => highest_from_group_ Selects the value with the highest weight, but only if the +# value was inherited from the given group. +# +# => lowest_from_group_ Same as above, except takes the value with the lowest weight. +# +# => highest_not_from_group_ Selects the value with the highest weight, but only if the +# value was not inherited from the given group. +# +# => lowest_not_from_group_ Same as above, except takes the value with the lowest weight. +meta-formatting: + prefix: + format: + - "highest" + duplicates: first-only + start-spacer: "" + middle-spacer: " " + end-spacer: "" + suffix: + format: + - "highest" + duplicates: first-only + start-spacer: "" + middle-spacer: " " + end-spacer: "" + +# +----------------------------------------------------------------------------------------------+ # +# | | # +# | PERMISSION CALCULATION AND INHERITANCE | # +# | | # +# | Modify the way permission checks, meta lookups and inheritance resolutions are handled. | # +# | | # +# +----------------------------------------------------------------------------------------------+ # + +# The algorithm LuckPerms should use when traversing the "inheritance tree". +# +# - Possible options: +# => breadth-first See: https://en.wikipedia.org/wiki/Breadth-first_search +# => depth-first-pre-order See: https://en.wikipedia.org/wiki/Depth-first_search +# => depth-first-post-order See: https://en.wikipedia.org/wiki/Depth-first_search +inheritance-traversal-algorithm: depth-first-pre-order + +# If a final sort according to "inheritance rules" should be performed after the traversal algorithm +# has resolved the inheritance tree. +# +# "Inheritance rules" refers to things such as group weightings, primary group status, and the +# natural contextual ordering of the group nodes. +# +# Setting this to 'true' will allow for the inheritance rules to take priority over the structure of +# the inheritance tree. +# +# Effectively when this setting is 'true': the tree is flattened, and rules applied afterwards, +# and when this setting is 'false':, the rules are just applied during each step of the traversal. +post-traversal-inheritance-sort: false + +# Defines the mode used to determine whether a set of contexts are satisfied. +# +# - Possible options: +# => at-least-one-value-per-key Set A will be satisfied by another set B, if at least one of the +# key-value entries per key in A are also in B. +# => all-values-per-key Set A will be satisfied by another set B, if all key-value +# entries in A are also in B. +context-satisfy-mode: at-least-one-value-per-key + +# LuckPerms has a number of built-in contexts. These can be disabled by adding the context key to +# the list below. +disabled-contexts: +# - "world" + +# +----------------------------------------------------------------------------------------------+ # +# | Permission resolution settings | # +# +----------------------------------------------------------------------------------------------+ # + +# If users on this server should have their global permissions applied. +# When set to false, only server specific permissions will apply for users on this server +include-global: true + +# If users on this server should have their global world permissions applied. +# When set to false, only world specific permissions will apply for users on this server +include-global-world: true + +# If users on this server should have global (non-server specific) groups applied +apply-global-groups: true + +# If users on this server should have global (non-world specific) groups applied +apply-global-world-groups: true + +# +----------------------------------------------------------------------------------------------+ # +# | Meta lookup settings | # +# +----------------------------------------------------------------------------------------------+ # + +# Defines how meta values should be selected. +# +# - Possible options: +# => inheritance Selects the meta value that was inherited first +# => highest-number Selects the highest numerical meta value +# => lowest-number Selects the lowest numerical meta value +meta-value-selection-default: inheritance + +# Defines how meta values should be selected per key. +meta-value-selection: +# max-homes: highest-number + +# +----------------------------------------------------------------------------------------------+ # +# | Inheritance settings | # +# +----------------------------------------------------------------------------------------------+ # + +# If the plugin should apply wildcard permissions. +# +# - If set to true, LuckPerms will detect wildcard permissions, and resolve & apply all registered +# permissions matching the wildcard. +apply-wildcards: true + +# If LuckPerms should resolve and apply permissions according to the Sponge style implicit wildcard +# inheritance system. +# +# - That being: If a user has been granted "example", then the player should have also be +# automatically granted "example.function", "example.another", "example.deeper.nesting", +# and so on. +apply-sponge-implicit-wildcards: false + +# If the plugin should parse regex permissions. +# +# - If set to true, LuckPerms will detect regex permissions, marked with "r=" at the start of the +# node, and resolve & apply all registered permissions matching the regex. +apply-regex: true + +# If the plugin should complete and apply shorthand permissions. +# +# - If set to true, LuckPerms will detect and expand shorthand node patterns. +apply-shorthand: true + +# +----------------------------------------------------------------------------------------------+ # +# | Extra settings | # +# +----------------------------------------------------------------------------------------------+ # + +# A list of context calculators which will be skipped when calculating contexts. +# +# - You can disable context calculators by either: +# => specifying the Java class name used by the calculator (e.g. com.example.ExampleCalculator) +# => specifying a sub-section of the Java package used by the calculator (e.g. com.example) +disabled-context-calculators: [] + +# Allows you to set "aliases" for the worlds sent forward for context calculation. +# +# - These aliases are provided in addition to the real world name. Applied recursively. +# - Remove the comment characters for the default aliases to apply. +world-rewrite: +# world_nether: world +# world_the_end: world + +# Define special group weights for this server. +# +# - Group weights can also be applied directly to group data, using the setweight command. +# - This section allows weights to be set on a per-server basis. +group-weight: +# admin: 10 + +# +----------------------------------------------------------------------------------------------+ # +# | | # +# | FINE TUNING OPTIONS | # +# | | # +# | A number of more niche settings for tweaking and changing behaviour. The section also | # +# | contains toggles for some more specialised features. It is only necessary to make changes to | # +# | these options if you want to fine-tune LuckPerms behaviour. | # +# | | # +# +----------------------------------------------------------------------------------------------+ # + +# +----------------------------------------------------------------------------------------------+ # +# | Miscellaneous (and rarely used) settings | # +# +----------------------------------------------------------------------------------------------+ # + +# If LuckPerms should produce extra logging output when it handles logins. +# +# - Useful if you're having issues with UUID forwarding or data not being loaded. +debug-logins: false + +# If LuckPerms should allow usernames with non alphanumeric characters. +# +# - Note that due to the design of the storage implementation, usernames must still be 16 characters +# or less. +allow-invalid-usernames: false + +# If LuckPerms should not require users to confirm bulkupdate operations. +# +# - When set to true, operations will be executed immediately. +# - This is not recommended, as bulkupdate has the potential to irreversibly delete large amounts of +# data, and is not designed to be executed automatically. +# - If automation is needed, users should prefer using the LuckPerms API. +skip-bulkupdate-confirmation: false + +# If LuckPerms should prevent bulkupdate operations. +# +# - When set to true, bulkupdate operations (the /lp bulkupdate command) will not work. +# - When set to false, bulkupdate operations will be allowed via the console. +disable-bulkupdate: false + +# If LuckPerms should allow a users primary group to be removed with the 'parent remove' command. +# +# - When this happens, the plugin will set their primary group back to default. +prevent-primary-group-removal: false diff --git a/velocity/config/plugins/luckperms/contexts.json b/velocity/config/plugins/luckperms/contexts.json new file mode 100755 index 0000000..b8d7b61 --- /dev/null +++ b/velocity/config/plugins/luckperms/contexts.json @@ -0,0 +1,4 @@ +{ + "static-contexts": {}, + "default-contexts": {} +} \ No newline at end of file diff --git a/velocity/config/plugins/velocitab/config.yml b/velocity/config/plugins/velocitab/config.yml new file mode 100755 index 0000000..64fd107 --- /dev/null +++ b/velocity/config/plugins/velocitab/config.yml @@ -0,0 +1,54 @@ +# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +# ┃ Velocitab Config ┃ +# ┃ by William278 & AlexDev03 ┃ +# ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ +# ┣╸ Information: https://william278.net/project/velocitab +# ┗╸ Documentation: https://william278.net/docs/velocitab + +# Check for updates on startup +check_for_updates: true +# Whether to remove nametag from players' heads if the nametag associated with their server group is empty. +remove_nametags: false +# Whether to disable header and footer if they are empty and let backend servers handle them. +disable_header_footer_if_empty: true +# Which text formatter to use (MINIMESSAGE, MINEDOWN or LEGACY) +formatter: MINIMESSAGE +# All servers which are not in other groups will be put in the fallback group. +# "false" will exclude them from Velocitab. +fallback_enabled: true +# The formats to use for the fallback group. +fallback_group: default +# Whether to show all players from all groups in the TAB list. +show_all_players_from_all_groups: false +# Whether to enable the PAPIProxyBridge hook for PAPI support +enable_papi_hook: true +# How long in seconds to cache PAPI placeholders for, in milliseconds. (0 to disable) +papi_cache_time: 30000 +# If you are using MINIMESSAGE formatting, enable this to support MiniPlaceholders in formatting. +enable_mini_placeholders_hook: true +# Whether to send scoreboard teams packets. Required for player list sorting and nametag formatting. +# Turn this off if you're using scoreboard teams on backend servers. +send_scoreboard_packets: true +# If built-in placeholders return a blank string, fallback to Placeholder API equivalents. +# For example, if %prefix% returns a blank string, use %luckperms_prefix%. Requires PAPIProxyBridge. +fallback_to_papi_if_placeholder_blank: false +# Whether to sort players in the TAB list. +sort_players: true +# Remove gamemode spectator effect for other players in the TAB list. +remove_spectator_effect: true +# Whether to enable the Plugin Message API (allows backend plugins to perform certain operations) +enable_plugin_message_api: true +# Whether to force sending tab list packets to all players, even if a packet for that action has already been sent. This could fix issues with some mods. +force_sending_tab_list_packets: false +# Whether to enable relational placeholders. With an high amount of players, this could cause lag. +enable_relational_placeholders: false +# A list of links that will be sent to display on player pause menus (Minecraft 1.21+ clients only). +# • Labels can be fully custom or built-in (one of 'bug_report', 'community_guidelines', 'support', 'status', +# 'feedback', 'community', 'website', 'forums', 'news', or 'announcements'). +# • If you supply a url with a 'bug_report' label, it will be shown if the player is disconnected. +# • Specify a set of server groups each URL should be sent on. Use '*' to show a URL to all groups. +# server_links: +# - label: <#00fb9a>About Velocitab +# url: https://william278.net/project/velocitab +# groups: +# - '*' diff --git a/velocity/config/plugins/velocitab/tab_groups.yml b/velocity/config/plugins/velocitab/tab_groups.yml new file mode 100755 index 0000000..f25ac1b --- /dev/null +++ b/velocity/config/plugins/velocitab/tab_groups.yml @@ -0,0 +1,42 @@ +# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +# ┃ Velocitab Tab Groups ┃ +# ┃ by William278 & AlexDev03 ┃ +# ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ +# ┣╸ Information: https://william278.net/project/velocitab +# ┗╸ Documentation: https://william278.net/docs/velocitab + +groups: +- name: default + headers: + - Running Velocitab by William278 & AlexDev03 + footers: + - There are currently %players_online%/%max_players_online% players online + format: [%server%] %prefix%%username% + nametag: + prefix: '' + suffix: '' + servers: + - lobby + - hub + - survival + - minigames + - skyblock + - prison + - creative + sorting_placeholders: + - '%role_weight%' + - '%username_lower%' + placeholder_replacements: + '%current_date_weekday_en-US%': + - placeholder: Monday + replacement: Monday + - placeholder: Tuesday + replacement: Tuesday + - placeholder: Else + replacement: Other day + collisions: false + header_footer_update_rate: 1000 + format_update_rate: 1000 + nametag_update_rate: 1000 + placeholder_update_rate: 1000 + only_list_players_in_same_server: false diff --git a/velocity/config/plugins/velocityrcon/rcon.toml b/velocity/config/plugins/velocityrcon/rcon.toml new file mode 100755 index 0000000..935cafc --- /dev/null +++ b/velocity/config/plugins/velocityrcon/rcon.toml @@ -0,0 +1,3 @@ +rcon-port = "25575" +rcon-password = "${CFG_RCON_PASSWORD}" +rcon-colored = false diff --git a/velocity/config/server-icon.png b/velocity/config/server-icon.png new file mode 100755 index 0000000..b837c82 Binary files /dev/null and b/velocity/config/server-icon.png differ diff --git a/velocity/config/velocity.toml b/velocity/config/velocity.toml new file mode 100755 index 0000000..b436219 --- /dev/null +++ b/velocity/config/velocity.toml @@ -0,0 +1,162 @@ +# Config version. Do not change this +config-version = "2.7" + +# What port should the proxy be bound to? By default, we'll bind to all addresses on port 25565. +bind = "0.0.0.0:25565" + +# What should be the MOTD? This gets displayed when the player adds your server to +# their server list. Only MiniMessage format is accepted. +motd = "<#09add3>Credit" + +# What should we display for the maximum number of players? (Velocity does not support a cap +# on the number of players online.) +show-max-players = 420 + +# Should we authenticate players with Mojang? By default, this is on. +online-mode = true + +# Should the proxy enforce the new public key security standard? By default, this is on. +force-key-authentication = true + +# If client's ISP/AS sent from this proxy is different from the one from Mojang's +# authentication server, the player is kicked. This disallows some VPN and proxy +# connections but is a weak form of protection. +prevent-client-proxy-connections = true + +# Should we forward IP addresses and other data to backend servers? +# Available options: +# - "none": No forwarding will be done. All players will appear to be connecting +# from the proxy and will have offline-mode UUIDs. +# - "legacy": Forward player IPs and UUIDs in a BungeeCord-compatible format. Use this +# if you run servers using Minecraft 1.12 or lower. +# - "bungeeguard": Forward player IPs and UUIDs in a format supported by the BungeeGuard +# plugin. Use this if you run servers using Minecraft 1.12 or lower, and are +# unable to implement network level firewalling (on a shared host). +# - "modern": Forward player IPs and UUIDs as part of the login process using +# Velocity's native forwarding. Only applicable for Minecraft 1.13 or higher. +player-info-forwarding-mode = "modern" + +# If you are using modern or BungeeGuard IP forwarding, configure a file that contains a unique secret here. +# The file is expected to be UTF-8 encoded and not empty. +forwarding-secret-file = "/run/secrets/forwarding_secret" + +# Announce whether or not your server supports Forge. If you run a modded server, we +# suggest turning this on. +# +# If your network runs one modpack consistently, consider using ping-passthrough = "mods" +# instead for a nicer display in the server list. +announce-forge = false + +# If enabled (default is false) and the proxy is in online mode, Velocity will kick +# any existing player who is online if a duplicate connection attempt is made. +kick-existing-players = false + +# Should Velocity pass server list ping requests to a backend server? +# Available options: +# - "disabled": No pass-through will be done. The velocity.toml and server-icon.png +# will determine the initial server list ping response. +# - "mods": Passes only the mod list from your backend server into the response. +# The first server in your try list (or forced host) with a mod list will be +# used. If no backend servers can be contacted, Velocity won't display any +# mod information. +# - "description": Uses the description and mod list from the backend server. The first +# server in the try (or forced host) list that responds is used for the +# description and mod list. +# - "all": Uses the backend server's response as the proxy response. The Velocity +# configuration is used if no servers could be contacted. +ping-passthrough = "mods" + +# If not enabled (default is true) player IP addresses will be replaced by in logs +enable-player-address-logging = true + +[servers] +# Configure your servers here. Each key represents the server's name, and the value +# represents the IP address of the server to connect to. +paper = "10.100.1.4:25565" +fabric = "10.100.1.5:25565" + +# In what order we should try servers when a player logs in or is kicked from a server. +try = [ + "fabric", + "paper" +] + +[forced-hosts] +# Configure your forced hosts here. +"paper.illegal-crime.org" = [ + "paper" +] +"fabric.illegal-crime.org" = [ + "fabric" +] + +[advanced] +# How large a Minecraft packet has to be before we compress it. Setting this to zero will +# compress all packets, and setting it to -1 will disable compression entirely. +compression-threshold = 256 + +# How much compression should be done (from 0-9). The default is -1, which uses the +# default level of 6. +compression-level = -1 + +# How fast (in milliseconds) are clients allowed to connect after the last connection? By +# default, this is three seconds. Disable this by setting this to 0. +login-ratelimit = 3000 + +# Specify a custom timeout for connection timeouts here. The default is five seconds. +connection-timeout = 5000 + +# Specify a read timeout for connections here. The default is 30 seconds. +read-timeout = 30000 + +# Enables compatibility with HAProxy's PROXY protocol. If you don't know what this is for, then +# don't enable it. +haproxy-protocol = false + +# Enables TCP fast open support on the proxy. Requires the proxy to run on Linux. +tcp-fast-open = false + +# Enables BungeeCord plugin messaging channel support on Velocity. +bungee-plugin-message-channel = true + +# Shows ping requests to the proxy from clients. +show-ping-requests = false + +# By default, Velocity will attempt to gracefully handle situations where the user unexpectedly +# loses connection to the server without an explicit disconnect message by attempting to fall the +# user back, except in the case of read timeouts. BungeeCord will disconnect the user instead. You +# can disable this setting to use the BungeeCord behavior. +failover-on-unexpected-server-disconnect = true + +# Declares the proxy commands to 1.13+ clients. +announce-proxy-commands = true + +# Enables the logging of commands +log-command-executions = false + +# Enables logging of player connections when connecting to the proxy, switching servers +# and disconnecting from the proxy. +log-player-connections = true + +# Allows players transferred from other hosts via the +# Transfer packet (Minecraft 1.20.5) to be received. +accepts-transfers = false + +# Enables support for SO_REUSEPORT. This may help the proxy scale better on multicore systems +# with a lot of incoming connections, and provide better CPU utilization than the existing +# strategy of having a single thread accepting connections and distributing them to worker +# threads. Disabled by default. Requires Linux or macOS. +enable-reuse-port = false + +[query] +# Whether to enable responding to GameSpy 4 query responses or not. +enabled = false + +# If query is enabled, on what port should the query protocol listen on? +port = 25565 + +# This is the map name that is reported to the query services. +map = "Velocity" + +# Whether plugins should be shown in query response by default or not +show-plugins = false diff --git a/velocity/data/.keep b/velocity/data/.keep new file mode 100755 index 0000000..e69de29