Add fabric backend server

This commit is contained in:
2025-03-18 01:13:08 +00:00
parent c36b688cc1
commit 992128c36e
21 changed files with 1302 additions and 8 deletions

View File

@@ -1,5 +1,7 @@
UID=500
GID=500
UID=1000
GID=1000
VELOCITY_PORT=25565
RCON_PASSWORD=ChangeMe

16
.gitignore vendored
View File

@@ -5,7 +5,17 @@
/.env
# Docker volumes
/velocity/data/*
/luckperms/data/*
/velocity/data/**
!/velocity/data/.keep
/luckperms/data/**
!/luckperms/data/.keep
/schematics/**
/fabric/data/**
!/fabric/data/config
!/fabric/data/config/worldedit
!/fabric/data/config/worldedit/schematics
!/fabric/data/config/worldedit/schematics/.keep
!/**/.keep

View File

@@ -1,2 +1,3 @@
# illegal_crime_mc
The configuration files for the Illegal Crime Minecraft server.

View File

@@ -5,6 +5,9 @@ services:
user: "${UID}:${GID}"
restart: unless-stopped
depends_on:
fabric:
condition: service_healthy
restart: true
luckperms_db:
condition: service_healthy
restart: true
@@ -20,7 +23,7 @@ services:
illegal_crime_mc_network:
ipv4_address: "10.100.1.3"
ports:
- 25565:25565/tcp
- "${VELOCITY_PORT}:25565/tcp"
volumes:
- ./velocity/data:/server:rw
- ./velocity/config:/config:ro
@@ -54,6 +57,133 @@ services:
signedvelocity:Jp1p9BHR
velocitab:TTtLPunq
fabric:
image: itzg/minecraft-server
container_name: illegal_crime_fabric
restart: unless-stopped
depends_on:
luckperms_db:
condition: service_healthy
restart: true
secrets:
- rcon_password
- forwarding_secret
- luckperms_db_password
networks:
illegal_crime_mc_network:
ipv4_address: "10.100.1.5"
volumes:
- ./fabric/data:/data:rw
- ./fabric/config:/config:ro
- ./schematics:/data/config/worldedit/schematics:rw
environment:
UID: "${UID}"
GID: "${GID}"
EULA: true
TYPE: FABRIC
SERVER_NAME: Illegal Crime Fabric
MOTD: Credit
VERSION: "1.21.3"
INIT_MEMORY: 512m
MAX_MEMORY: 4G
ENABLE_AUTOPAUSE: true
MAX_TICK_TIME: -1
ENFORCE_SECURE_PROFILE: false
SNOOPER_ENABLED: false
ENABLE_QUERY: false
BROADCAST_CONSOLE_TO_OPS: false
BROADCAST_RCON_TO_OPS: false
ONLINE_MODE: false
OP_PERMISSION_LEVEL: 2
MAX_PLAYERS: 50
DIFFICULTY: easy
LEVEL: world
MODE: creative
LEVEL_TYPE: minecraft:flat
ENABLE_COMMAND_BLOCK: true
GENERATE_STRUCTURES: false
SPAWN_ANIMALS: false
SPAWN_MONSTERS: false
SPAWN_NPCS: false
SPAWN_PROTECTION: 0
USE_AIKAR_FLAGS: true
LOG_TIMESTAMP: true
REPLACE_ENV_IN_PLACE: true
REPLACE_ENV_DURING_SYNC: true
REPLACE_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_FORWARDING_SECRET_FILE: /run/secrets/forwarding_secret
CFG_LUCKPERMS_DB_PASSWORD_FILE: /run/secrets/luckperms_db_password
RCON_CMDS_STARTUP: |-
gamerule announceAdvancements false
gamerule commandBlocksEnabled true
gamerule commandBlockOutput false
gamerule doDaylightCycle false
gamerule doEntityDrops false
gamerule doFireTick false
gamerule doInsomnia false
gamerule doImmediateRespawn true
gamerule doMobLoot false
gamerule doMobSpawning false
gamerule doPatrolSpawning false
gamerule doTileDrops false
gamerule doTraderSpawning false
gamerule doVinesSpread false
gamerule doWeatherCycle false
gamerule doWardenSpawning false
gamerule keepInventory true
gamerule logAdminCommands false
gamerule modGriefing false
gamerule playersSleepingPercentage 0
gamerule recipesUnlock false
gamerule showRecipeMessages false
gamerule tntExplodes false
time set 1000
weather clear
MODRINTH_PROJECTS: |
badpackets:hjhT2sMz
carpet-extra:WDB4578I
carpet-tis-addition:znBCTqSr
cloth-config:FgXq8Sfo
collective:UqTBXnWC
capture-playback:YmnYuB3l
carpet:ZF8ufR9V
fabric-api:Ybg4nYGj
fabricproxy-lite:AQhF7kvw
fabric-language-kotlin:476dzMG5
g4mespeed:oPV7qsy2
krypton:Acz3ttTp
ksyxis:ueN87SNs
litematica-server-paster:LttjgeM4
lithium:W0Cc7ZVd
luckperms:S8033hpf
mods-command:1F0YwdWN
no-chat-reports:Cg7X9iDa
packet-fixer:XBM9PO5r
redstone-multimeter:kTiP34Lj
servercore:PgKTFLEL
servux:u85kwLvC
signedvelocity:AusZl7xe
spark:rExumjPo
threadtweak:HV6EY0h3
vanilla-permissions:7awQNHzw
worldedit:3TQ8W0Ar
luckperms_db:
image: postgres:17.4
container_name: illegal_crime_luckperms_db

View File

@@ -0,0 +1,5 @@
hackOnlineMode = true
hackEarlySend = true
hackMessageChain = true
disconnectMessage = "This server requires you to connect with Velocity."
secret = "${CFG_FORWARDING_SECRET}"

View File

@@ -0,0 +1,7 @@
{
"demandOnClientMessage": "You do not have No Chat Reports, and this server is configured to require it on client!",
"demandOnClient": false,
"convertToGameMessage": true,
"addQueryData": true,
"enableDebugLog": false
}

12
fabric/config/collective.json5 Executable file
View File

@@ -0,0 +1,12 @@
{
// When enabled, transfer the held items and armour from replaced entities by any of the Entity Spawn mods which depend on Collective.
"transferItemsBetweenReplacedEntities": true,
// The amount of times Collective loops through possible mob drops to get them all procedurally. Drops are only generated when a dependent mod uses them. Lowering this can increase world load time but decrease accuracy.
// min: 1, max: 500
"loopsAmountUsedToGetAllEntityDrops": 100,
// The delay of the is-there-a-block-around-check around entities in ms. Used in mods which depends on a specific blockstate in the world. Increasing this number can increase TPS if needed.
// min: 0, max: 3600000
"findABlockCheckAroundEntitiesDelayMs": 30000,
// Enables pets for Patrons. Will be added in a future release.
"enablePatronPets": true
}

View File

@@ -0,0 +1,6 @@
# This is the configuration file for Lithium.
#
# You can find information on editing this file and all the available options here:
# https://github.com/CaffeineMC/lithium-fabric/wiki/Configuration-File
#
# By default, this file will be empty except for this notice.

View File

@@ -0,0 +1,638 @@
####################################################################################################
# +----------------------------------------------------------------------------------------------+ #
# | __ __ ___ __ __ | #
# | | | | / ` |__/ |__) |__ |__) |\/| /__` | #
# | |___ \__/ \__, | \ | |___ | \ | | .__/ | #
# | | #
# | 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 = "fabric"
# If the servers own UUID cache/lookup facility should be used when there is no record for a player
# already in LuckPerms.
#
# - When this is set to 'false', commands using a player's username will not work unless the player
# has joined since LuckPerms was first installed.
# - To get around this, you can use a player's uuid directly in the command, or enable this option.
# - When this is set to 'true', the server facility is used. This may use a number of methods,
# including checking the servers local cache, or making a request to the Mojang API.
use-server-uuid-cache = false
# +----------------------------------------------------------------------------------------------+ #
# | | #
# | 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 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 = "pluginmsg"
# 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 BungeeCord 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. | #
# | | #
# +----------------------------------------------------------------------------------------------+ #
# 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 <on|off>'
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_<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_<track> Same as above, except takes the value with the lowest weight.
#
# => highest_not_on_track_<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_<track> Same as above, except takes the value with the lowest weight.
#
# => highest_from_group_<group> Selects the value with the highest weight, but only if the
# value was inherited from the given group.
#
# => lowest_from_group_<group> Same as above, except takes the value with the lowest weight.
#
# => highest_not_from_group_<group> Selects the value with the highest weight, but only if the
# value was not inherited from the given group.
#
# => lowest_not_from_group_<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 = true
# 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
# If the owner of an integrated server should bypass permission checks.
#
# - This setting only applies when LuckPerms is active on a single-player world.
# - The owner of an integrated server is the player whose client instance is running the server.
integrated-server-owner-bypasses-checks = 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. | #
# | | #
# +----------------------------------------------------------------------------------------------+ #
# +----------------------------------------------------------------------------------------------+ #
# | Server Operator (OP) settings | #
# +----------------------------------------------------------------------------------------------+ #
# Controls whether server operators should exist at all.
#
# - When set to 'false', all players will be de-opped, and the /op and /deop commands will be
# disabled. Note that vanilla features like the spawn-protection require an operator on the
# server to work.
enable-ops = true
# Enables or disables a special permission based system in LuckPerms for controlling OP status.
#
# - If set to true, any user with the permission "luckperms.autoop" will automatically be granted
# server operator status. This permission can be inherited, or set on specific servers/worlds,
# temporarily, etc.
# - Additionally, setting this to true will force the "enable-ops" option above to false. All users
# will be de-opped unless they have the permission node, and the op/deop commands will be
# disabled.
# - It is recommended that you use this option instead of assigning a single '*' permission.
# - However, on Fabric this setting can be used as a "pseudo" root wildcard, as many mods support
# the operator system over permissions.
auto-op = false
# +----------------------------------------------------------------------------------------------+ #
# | 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
# If LuckPerms should update the list of commands sent to the client when permissions are changed.
update-client-command-list = true
# If LuckPerms should attempt to resolve Vanilla command target selectors for LP commands.
# See here for more info: https://minecraft.wiki/w/Target_selectors
resolve-command-selectors = false

View File

@@ -0,0 +1,4 @@
hidden-mods {
# Set the list of mod ids to hide/ignore.
hidden-mod-ids=[]
}

View File

@@ -0,0 +1,13 @@
#Packet Fixer config file.
#Default values (minecraft default): nbtMaxSize 2097152, packetSize 1048576, decoderSize 8388608 and varInt21Size 3.
#Max values are 2147483647 for packetSize/decoderSize/varInt21 and 9223372036854775807 for nbtMaxSize.
#Mon Mar 17 00:50:58 UTC 2025
allSizesUnlimited=true
chunkPacketData=2097152
decoderSize=8388608
nbtMaxSize=2097152
packetSize=1048576
timeout=90
varInt=5
varInt21=3
varLong=10

View File

@@ -0,0 +1,14 @@
{
"meter": {
"allow_teleports": true
},
"meter_group": {
"meter_limit": -1,
"max_idle_time": 72000
},
"event_types": {
"allowed": "all",
"blacklist": [],
"whitelist": []
}
}

View File

@@ -0,0 +1,317 @@
# The main configuration file for ServerCore.
# Most of these settings can be reloaded without restarting using /servercore reload.
# Most miscellaneous feature toggles.
features:
# Reverts enderpearl behavior to pre-1.21.2. The following will change when this setting is enabled:
# ► Enderpearls will no longer load chunks around them.
# ► Enderpearls will load / unload with chunks again instead of with their owner joining / leaving the game.
# Note: Toggling this setting may cause some old enderpearls from before the toggle to be lost.
prevent-enderpearl-chunkloading: false
# Prevents lagspikes caused by players moving into unloaded chunks.
prevent-moving-into-unloaded-chunks: false
# The amount of seconds between auto-saves when /save-on is active.
autosave-interval-seconds: 300
# The fraction that decides the chance of experience orbs being able to merge with each other. (1 = 100%, 40 = 2.5%)
# Note that just like in vanilla, experience orbs will still need to be of the same size to actually merge.
xp-merge-fraction: 40
# The radius in blocks that experience orbs will merge at.
xp-merge-radius: 0.5
# The radius in blocks that items will merge at.
item-merge-radius: 0.5
lobotomize-villagers:
# Makes villagers tick less often if they are stuck in a 1x1 space.
enabled: false
# Decides the interval in between villager ticks when lobotomized.
tick-interval: 20
# Automatically modifies dynamic settings based on the server performance.
dynamic:
# Enables dynamic performance checks.
enabled: false
# The average MSPT to target.
target-mspt: 35
# The settings that will be decreased when the server is overloaded, in the specified order.
# You can remove settings from the list that you don't want to be dynamically adjusted.
# ► max = The maximum value the server will increase the setting to.
# ► min = The minimum value the server will decrease the setting to.
# ► increment = The amount the setting will be increased or decreased by.
# ► interval = The amount of seconds between each check to increase or decrease.
dynamic-settings:
- setting: 'CHUNK_TICK_DISTANCE'
max: 10
min: 6
increment: 1
interval: 15
- setting: 'MOBCAP_PERCENTAGE'
max: 100
min: 50
increment: 10
interval: 15
- setting: 'SIMULATION_DISTANCE'
max: 10
min: 6
increment: 1
interval: 15
- setting: 'CHUNK_TICK_DISTANCE'
max: 6
min: 2
increment: 1
interval: 15
- setting: 'MOBCAP_PERCENTAGE'
max: 50
min: 30
increment: 10
interval: 15
- setting: 'SIMULATION_DISTANCE'
max: 6
min: 2
increment: 1
interval: 15
- setting: 'VIEW_DISTANCE'
max: 10
min: 5
increment: 1
interval: 150
# A special mobcap that only affects the breeding of animals and villagers.
breeding-cap:
# Enables breeding caps.
enabled: false
# The breeding cap for villagers.
# ► limit = The limit of mobs of the same type within range. Setting this to negative will disable the breeding cap.
# ► range = The range it will check for entities of the same type.
# ► unlimited-height = Whether to ignore the vertical distance when checking for entities of the same type.
villagers:
limit: 32
range: 64
unlimited-height: false
# The breeding cap for animals.
# Note that this cap only checks for animals of the same type.
# If the limit is 32 you can still breed 32 cows and 32 pigs next to each other.
animals:
limit: 32
range: 64
unlimited-height: false
# Gives more control over mob spawning.
mob-spawning:
# Mobcap settings for zombie reinforcements.
# ► enforce-mobcap = Whether to enforce mobcaps for this type of mobspawning.
# ► additional-capacity = Additional capacity for this specific mobcap. Decides how much it can spawn over the regular mobcap.
# It is recommended to allow them to spawn a bit over the regular mobcap as they would otherwise never get a chance to spawn.
zombie-reinforcements:
enforce-mobcap: false
additional-capacity: 32
# Mobcap settings for zombified piglin spawning from nether portal random ticks.
nether-portal-randomticks:
enforce-mobcap: false
additional-capacity: 32
# Mobcap settings for mobs spawned from monster spawners.
monster-spawners:
enforce-mobcap: false
additional-capacity: 32
# Mobcap settings for silverfish spawned from the infested potion effect.
infested:
enforce-mobcap: false
additional-capacity: 32
# A list of mob categories with their respective mobcap and spawn interval.
# ► category = The vanilla spawn category.
# ► mobcap = The maximum amount of entities in the same category that can spawn near a player.
# ► spawn-interval = The interval between spawn attempts in ticks. Higher values mean less frequent spawn attempts.
categories:
- category: 'MONSTER'
mobcap: 70
spawn-interval: 1
- category: 'CREATURE'
mobcap: 10
spawn-interval: 400
- category: 'AMBIENT'
mobcap: 15
spawn-interval: 1
- category: 'AXOLOTLS'
mobcap: 5
spawn-interval: 1
- category: 'UNDERGROUND_WATER_CREATURE'
mobcap: 5
spawn-interval: 1
- category: 'WATER_CREATURE'
mobcap: 5
spawn-interval: 1
- category: 'WATER_AMBIENT'
mobcap: 20
spawn-interval: 1
# Settings for commands and their formatting.
commands:
# Enables the /servercore status command.
status-enabled: true
# Enables the /mobcaps command.
mobcaps-enabled: true
colors:
# The colors used in command feedback. You can use hex codes or minecraft legacy color names.
# The primary color is the most used color in command feedback.
primary: 'dark_aqua'
# The secondary color is used for highlighting important information, like values.
secondary: 'green'
# The tertiary color is mostly used for text in titles.
tertiary: 'aqua'
# Activation range can drastically reduce the amount of lag caused by ticking entities.
# It does this by cleverly skipping certain entity ticks based on the distance to players and other factors, like immunity checks.
# Immunity checks determine whether an entity should be ticked even when it's outside the activation range, like for example when it is falling or takes damage.
# Note: while this is a very powerful feature, it can still slow down mobfarms and break very specific technical contraptions.
activation-range:
# Enables activation range.
enabled: false
# Briefly ticks entities newly added to the world for 10 seconds (includes both spawning and loading).
# This gives them a chance to properly immunize when they are spawned if they should be. Can be helpful for mobfarms.
tick-new-entities: true
# Enables vertical range checks. By default, activation ranges only work horizontally.
# This can greatly improve performance on taller worlds, but might break a few very specific ai-based mobfarms.
use-vertical-range: false
# Skips 1/4th of entity ticks whilst not immune.
# This affects entities that are within the activation range, but not immune (for example by falling or being in water).
skip-non-immune: false
# Allows villagers to tick regardless of the activation range when panicking.
villager-tick-panic: true
# The time in seconds that a villager needs to be inactive for before obtaining work immunity (if it has work tasks).
villager-work-immunity-after: 20
# The amount of ticks an inactive villager will wake up for when it has work immunity.
villager-work-immunity-for: 20
# A list of entity types that should be excluded from activation range checks.
excluded-entity-types:
- 'minecraft:warden'
- 'minecraft:ghast'
- 'minecraft:hopper_minecart'
# The activation type that will get assigned to any entity that doesn't have a custom activation type.
# ► activation-range = The range an entity is required to be in from a player to be activated.
# ► tick-interval = The interval between 'active' ticks whilst the entity is inactive. Negative values will disable these active ticks.
# ► wakeup-interval = The interval between inactive entity wakeups in seconds.
# ► extra-height-up = Allows entities to be ticked when far above the player when vertical range is in use.
# ► extra-height-down = Allows entities to be ticked when far below the player when vertical range is in use.
default-activation-type:
activation-range: 16
tick-interval: 20
wakeup-interval: -1
extra-height-up: false
extra-height-down: false
# A list of custom activation types.
# ► name = The name of the activation type.
# ► entity-matcher = A list of conditions to filter entities. Only one of these conditions needs to be met for an entity to match.
# ► If an entity matches multiple activation types, the one highest in the list will be used. The conditions accept the following formats:
# - Entity type matching | Uses the entity type's identifier. | 'minecraft:zombie' matches zombies, but for example not husks or drowned.
# - Typeof class matching | Uses the 'typeof:' prefix. | 'typeof:monster' matches all monsters.
# ► Available typeof classes: mob, monster, raider, neutral, ambient, animal, water_animal, flying_animal, flying_monster, villager, projectile.
custom-activation-types:
- name: 'raider'
activation-range: 48
tick-interval: 20
wakeup-interval: 20
extra-height-up: true
extra-height-down: false
entity-matcher:
- 'typeof:raider'
- name: 'water'
activation-range: 16
tick-interval: 20
wakeup-interval: 60
extra-height-up: false
extra-height-down: false
entity-matcher:
- 'typeof:water_animal'
- name: 'villager'
activation-range: 16
tick-interval: 20
wakeup-interval: 30
extra-height-up: false
extra-height-down: false
entity-matcher:
- 'typeof:villager'
- name: 'zombie'
activation-range: 16
tick-interval: 20
wakeup-interval: 20
extra-height-up: true
extra-height-down: false
entity-matcher:
- 'minecraft:zombie'
- 'minecraft:husk'
- name: 'monster-below'
activation-range: 32
tick-interval: 20
wakeup-interval: 20
extra-height-up: true
extra-height-down: true
entity-matcher:
- 'minecraft:creeper'
- 'minecraft:slime'
- 'minecraft:magma_cube'
- 'minecraft:hoglin'
- name: 'flying-monster'
activation-range: 48
tick-interval: 20
wakeup-interval: 20
extra-height-up: true
extra-height-down: false
entity-matcher:
- 'minecraft:ghast'
- 'minecraft:phantom'
- name: 'monster'
activation-range: 32
tick-interval: 20
wakeup-interval: 20
extra-height-up: true
extra-height-down: false
entity-matcher:
- 'typeof:monster'
- name: 'animal'
activation-range: 16
tick-interval: 20
wakeup-interval: 60
extra-height-up: false
extra-height-down: false
entity-matcher:
- 'typeof:animal'
- 'typeof:ambient'
- name: 'creature'
activation-range: 24
tick-interval: 20
wakeup-interval: 30
extra-height-up: false
extra-height-down: false
entity-matcher:
- 'typeof:mob'

View File

@@ -0,0 +1,18 @@
# Allows you to toggle specific optimizations that don't have full vanilla parity.
# These settings will only take effect after server restarts.
# Prevents many different lagspikes caused by loading chunks synchronously.
# This for example causes maps to only update loaded chunks, which depending on the viewdistance can be a smaller radius than vanilla.
reduce-sync-loads: true
# Can significantly reduce the time spent on chunk iteration by only updating the ticking chunks list each second, rather than each tick.
# This is especially useful for servers with a high playercount and / or viewdistance.
cache-ticking-chunks: true
# Optimizes command block executions by caching parsed commands.
# Command parsing is a relatively expensive operation. By caching it we avoid parsing the same command every time it is executed.
optimize-command-blocks: false
# Can significantly reduce time spent on mobspawning, but isn't as accurate as vanilla on biome borders.
# This may cause mobs from another biome to spawn a few blocks across a biome border (this does not affect structure spawning!).
fast-biome-lookups: false
# Fluid random ticks, like lava spreading fire, are run twice each game tick.
# Enabling this will cancel the 'duplicate' second fluid tick, but this may cause slight behavior changes.
cancel-duplicate-fluid-ticks: false

54
fabric/config/servux.json Executable file
View File

@@ -0,0 +1,54 @@
{
"DataProviderToggles": {
"hud_data": true,
"litematic_data": true,
"structure_bounding_boxes": true,
"servux_main": true,
"tweaks_data": true,
"entity_data": true,
"debug_data": false
},
"hud_data": {
"permission_level": 0,
"update_interval": 80,
"share_weather_status": false,
"weather_permission_level": 0,
"share_seed": false,
"seed_permission_level": 2
},
"litematic_data": {
"permission_level": 0,
"permission_level_paste": 0,
"fix_rail_rotations": true,
"fix_stairs_mirror": true
},
"structure_bounding_boxes": {
"permission_level": 0,
"structures_blacklist_enabled": false,
"structures_whitelist_enabled": false,
"structures_blacklist": [
"minecraft:buried_treasure"
],
"structures_whitelist": [],
"update_interval": 40,
"timeout": 600
},
"servux_main": {
"permission_level": 0,
"permission_level_admin": 3,
"permission_level_easy_place": 0,
"default_language": "en_us",
"debug_log": false
},
"tweaks_data": {
"permission_level": 0
},
"entity_data": {
"permission_level": 0,
"nbt_query_override": false,
"nbt_query_permission_level": 2
},
"debug_data": {
"permission_level": 2
}
}

View File

@@ -0,0 +1,4 @@
{
"_header": "spark configuration file - https://spark.lucko.me/docs/Configuration",
"backgroundProfiler": false
}

13
fabric/config/threadtweak.json Executable file
View File

@@ -0,0 +1,13 @@
{
"threadCount": {
"bootstrap": 1,
"main": 3
},
"threadPriority": {
"game": 5,
"bootstrap": 1,
"main": 1,
"io": 1,
"integratedServer": 5
}
}

View File

@@ -0,0 +1,46 @@
#Don't put comments; they get removed
#Mon Mar 17 00:51:37 UTC 2025
allow-symbolic-links=false
butcher-default-radius=-1
butcher-max-radius=-1
calculation-timeout=100
cheat-mode=false
command-block-support=false
craftscript-dir=craftscripts
default-locale=default
default-max-changed-blocks=-1
default-max-polygon-points=-1
default-max-polyhedron-points=-1
default-vertical-height=256
disallowed-blocks=minecraft\:oak_sapling,minecraft\:jungle_sapling,minecraft\:dark_oak_sapling,minecraft\:spruce_sapling,minecraft\:birch_sapling,minecraft\:acacia_sapling,minecraft\:black_bed,minecraft\:blue_bed,minecraft\:brown_bed,minecraft\:cyan_bed,minecraft\:gray_bed,minecraft\:green_bed,minecraft\:light_blue_bed,minecraft\:light_gray_bed,minecraft\:lime_bed,minecraft\:magenta_bed,minecraft\:orange_bed,minecraft\:pink_bed,minecraft\:purple_bed,minecraft\:red_bed,minecraft\:white_bed,minecraft\:yellow_bed,minecraft\:powered_rail,minecraft\:detector_rail,minecraft\:short_grass,minecraft\:dead_bush,minecraft\:moving_piston,minecraft\:piston_head,minecraft\:sunflower,minecraft\:rose_bush,minecraft\:dandelion,minecraft\:poppy,minecraft\:brown_mushroom,minecraft\:red_mushroom,minecraft\:tnt,minecraft\:torch,minecraft\:fire,minecraft\:redstone_wire,minecraft\:wheat,minecraft\:potatoes,minecraft\:carrots,minecraft\:melon_stem,minecraft\:pumpkin_stem,minecraft\:beetroots,minecraft\:rail,minecraft\:lever,minecraft\:redstone_torch,minecraft\:redstone_wall_torch,minecraft\:repeater,minecraft\:comparator,minecraft\:stone_button,minecraft\:birch_button,minecraft\:acacia_button,minecraft\:dark_oak_button,minecraft\:jungle_button,minecraft\:oak_button,minecraft\:spruce_button,minecraft\:cactus,minecraft\:sugar_cane,minecraft\:bedrock
extended-y-limit=false
history-size=15
log-commands=false
log-file=
log-format=[%1$tY-%1$tm-%1$td %1$tH\:%1$tM\:%1$tS %4$s]\: %5$s%6$s%n
max-brush-radius=6
max-calculation-timeout=300
max-changed-blocks=-1
max-polygon-points=20
max-polyhedron-points=20
max-radius=-1
max-super-pickaxe-size=5
nav-use-glass=true
nav-wand-distance=50
nav-wand-item=minecraft\:compass
profile=false
register-help=true
schematic-save-dir=schematics
scripting-timeout=3000
server-side-cui=true
shell-save-type=
snapshots-dir=
snapshots-experimental=false
super-pickaxe-drop-items=true
super-pickaxe-many-drop-items=true
trace-unflushed-sessions=true
use-in-creative=false
use-inventory=false
use-inventory-creative-override=false
use-inventory-override=false
wand-item=minecraft\:wooden_axe

View File

View File

@@ -228,7 +228,7 @@ watch-files: true
# 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
messaging-service: pluginmsg
# If LuckPerms should automatically push updates after a change has been made with a command.
auto-push-updates: true

View File

@@ -16,7 +16,7 @@ show-max-players = 420
online-mode = true
# Should the proxy enforce the new public key security standard? By default, this is on.
force-key-authentication = true
force-key-authentication = false
# 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