Compare commits

...

13 Commits

Author SHA1 Message Date
eldar 32a020c572 Updated server to 1.21.11
Added Essentials, Voxy Serverside plugin, LoginTo, squaremap, imageframe, luckperms
Changed from url download to modrinth for better reliability.
2026-10-08 21:50:10 +03:00
eldar ec053a8ba9 fixed lss version 2026-10-06 20:25:19 +03:00
eldar 0809ba5a2c Fixed compose file 2026-10-06 20:16:55 +03:00
eldar f4bea5f4a9 Removed squaremap and added LSS 0.16.0 2026-10-06 20:15:31 +03:00
eldar 84062ed45a Disabled broadcaster as it will be removed from this repo 2026-09-29 18:50:28 +03:00
eldar df983eeabc Update docker-compose.yml 2026-09-23 15:04:24 +02:00
eldar 5d2f40f825 Update docker-compose.yml 2026-09-23 15:01:45 +02:00
eldar f0fe89832b Update docker-compose.yml 2026-09-01 17:54:32 +02:00
eldar 582e5ba898 Update mcserver/spigot.yml 2026-08-31 19:09:51 +02:00
eldar 4f8d62cf95 Added packetevents plugin 2026-08-23 19:28:42 +02:00
eldar c66e1d2345 Added coordinateoffset plugin back 2026-08-23 19:20:48 +02:00
eldar b04b997260 Added backups to gitignore 2026-08-23 20:09:01 +03:00
eldar 565564898d Merge pull request 'Switched to paper for better performance.' (#3) from dev into main
Reviewed-on: #3
2026-08-23 19:04:39 +02:00
17 changed files with 53021 additions and 25 deletions
+2 -1
View File
@@ -27,4 +27,5 @@ mcserver/plugins/GWarp/*.data
mcserver/plugins/BetterMessages/data/
mcserver/plugins/Geyser-Spigot/cache/
mcserver/plugins/Geyser-Spigot/locales/
mcserver/plugins/vane-*/storage.json
mcserver/plugins/vane-*/storage.json
mc-backups/
+46 -22
View File
@@ -1,7 +1,6 @@
services:
mc:
image: itzg/minecraft-server
pull_policy: daily
tty: true
stdin_open: true
depends_on:
@@ -14,19 +13,29 @@ services:
- "${RCON_PORT}:25585"
- "${BLUEMAP_PORT}:8080"
- "${GEYSER_PORT}:19132/udp"
- "${IMAGEFRAME_PORT}:8517"
environment:
VERSION: "1.21.4"
VERSION: "1.21.11"
ANNOUNCE_PLAYER_ACHIEVEMENTS: false
EULA: "TRUE"
TYPE: "PAPER"
PLUGINS: |
https://hangarcdn.papermc.io/plugins/henkelmax/SimpleVoiceChat/versions/bukkit-2.6.20/PAPER/voicechat-bukkit-2.6.20.jar
https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot
https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot
https://hangarcdn.papermc.io/plugins/froobynooby/SeeMore/versions/1.0.2/PAPER/SeeMore-1.0.2.jar
https://hangarcdn.papermc.io/plugins/ViaVersion/ViaVersion/versions/5.11.0/PAPER/ViaVersion-5.11.0.jar
https://hangarcdn.papermc.io/plugins/SRTeam/SkinsRestorer/versions/15.12.4/PAPER/SkinsRestorer.jar
https://hangarcdn.papermc.io/plugins/jmp/squaremap/versions/1.3.14/PAPER/squaremap-paper-mc26.2-1.3.14.jar
MODRINTH_PROJECTS: |
viaversion
simple-voice-chat
squaremap
packetevents
voxy-server-side
skinsrestorer
vivecraft-spigot-extension
login-to
imageframe
essentialsx-chat-module
essentialsx
luckperms
REMOVE_OLD_MODS: false
COPY_CONFIG_DEST: "/data"
ONLINE_MODE: false
RCON_PASSWORD: ${RCON_PASSWORD}
@@ -34,17 +43,31 @@ services:
MAX_MEMORY: "4G"
SPAWN_PROTECTION: 0
ENABLE_WHITELIST: true
ENABLE_AUTOPAUSE: true
ENABLE_AUTOPAUSE: false
volumes:
- ./mc-data:/data
- ./mcserver:/config
- ./plugins:/plugins
restart: unless-stopped
networks:
- mc-network
monitor:
image: itzg/mc-monitor
command: export-for-prometheus
ports:
- "9090:8080"
environment:
EXPORT_SERVERS: mc
DEBUG: "true"
depends_on:
- mc
networks:
- mc-network
restore-backup:
# Same image as mc, but any base image with bash and tar will work
image: itzg/mc-backup
user: "${UID}:${GID}"
restart: "no"
entrypoint: restore-rsync-backup
volumes:
@@ -56,6 +79,7 @@ services:
- mc-network
backups:
image: itzg/mc-backup
user: "${UID}:${GID}"
depends_on:
mc:
condition: service_healthy
@@ -74,19 +98,19 @@ services:
- ./mc-backups:/backups
networks:
- mc-network
broadcaster:
image: ghcr.io/mcxboxbroadcast/standalone:latest
user: "${UID}:${GID}"
depends_on:
#proxy:
# condition: service_healthy
mc:
condition: service_healthy
volumes:
- ./mcxboxbroadcast/config:/opt/data/config
networks:
- mc-network
restart: unless-stopped
# broadcaster:
## image: ghcr.io/mcxboxbroadcast/standalone:latest
## user: "${UID}:${GID}"
## depends_on:
## #proxy:
## # condition: service_healthy
## mc:
## condition: service_healthy
## volumes:
## - ./mcxboxbroadcast/config:/opt/data/config
## networks:
## - mc-network
## restart: unless-stopped
networks:
mc-network:
+2 -1
View File
@@ -5,4 +5,5 @@ SERVER_PORT=25565
VOICE_CHAT_PORT=24454
RCON_PORT=25585
BLUEMAP_PORT=8100
GEYSER_PORT=19132
GEYSER_PORT=19132
IMAGEFRAME_PORT=8517
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,7 @@
# This file stores custom item aliases.
# Note: You cannot alias an item to another entry in this file.
aliases:
bluepaint: blue_dye
snad: sand
breakfast: cooked_porkchop
File diff suppressed because it is too large Load Diff
+48
View File
@@ -0,0 +1,48 @@
# EssentialsX kit configuration.
# If no kits are defined in this file, the plugin will attempt to copy them from 'config.yml'.
# All items MUST be followed by a quantity.
# Kit names should be in lowercase and will be treated as such in permissions and costs.
# Syntax: - item[:durability] amount [enchantment:level]... [itemmeta:value]...
# For detailed information on item meta, visit https://wiki.ess3.net/wiki/Item_Meta
#
# To make a kit execute a command, add '/<command>' to the item list. Use {USERNAME} to reference the player receiving the kit.
# Use {PLAYER} to display the player's display name instead of the username.
# 'delay' refers to the cooldown between how often you can use each kit, measured in seconds. Set to -1 for a one-time kit.
#
# You can also organize kits into separate files within the 'kits' subdirectory.
# Essentials will treat all '.yml' files in the subdirectory as valid kit files and add them along with those in here.
# Each file in the 'kits' subdirectory must be formatted the same as this file.
#
# For more information, refer to https://wiki.ess3.net/wiki/Kits
kits:
tools:
delay: 10
items:
- stonesword 1
- stoneshovel 1
- stonepickaxe 1
- stoneaxe 1
dtools:
delay: 600
items:
- dpickaxe 1 efficiency:1 durability:1 fortune:1 name:&4Gigadrill lore:The_drill_that_&npierces|the_heavens
- dshovel 1 digspeed:3 name:Dwarf lore:Diggy|Diggy|Hole
- lhelm 1 color:255,255,255 name:Top_Hat lore:Good_day,_Good_day
- daxe:780 1
- /broadcast {USERNAME} just got some fancy tools!
notch:
delay: 6000
items:
- playerhead 1 player:Notch
color:
delay: 6000
items:
- writtenbook 1 title:&4Book_&9o_&6Colors author:KHobbits lore:Ingame_color_codes book:Colors
firework:
delay: 6000
items:
- fireworkrocket 1 name:Angry_Creeper color:red fade:green type:creeper power:1
- fireworkrocket 1 name:Starry_Night color:yellow,orange fade:blue type:star effect:trail,twinkle power:1
- fireworkrocket 2 name:Solar_Wind color:yellow,orange fade:red shape:large effect:twinkle color:yellow,orange fade:red shape:ball effect:trail color:red,purple fade:pink shape:star effect:trail power:1
+4
View File
@@ -0,0 +1,4 @@
&6Welcome, {PLAYER}&6!
&6Type &c/help&6 for a list of commands.
&6Type &c/list&6 to see who else is online.
&6Players online:&c {ONLINE} &6- World time:&c {WORLDTIME12}
+16
View File
@@ -0,0 +1,16 @@
# Configuration for the random teleport command.
# Some settings may be defaulted and can be changed using the '/settpr' command in-game.
default-location: '{world}'
excluded-biomes:
- cold_ocean
- deep_cold_ocean
- deep_frozen_ocean
- deep_lukewarm_ocean
- deep_ocean
- deep_warm_ocean
- frozen_ocean
- frozen_river
- lukewarm_ocean
- ocean
- river
- warm_ocean
@@ -0,0 +1,15 @@
updateLegacyToAdventure: true
newUidCacheBuilt: true
updateSpawnsToNewSpawnsConfig: true
updateJailsToNewJailsConfig: true
warnMetrics: true
updateRandomTeleport: true
moverulesToFile: true
sanitizeAllUserFilenames: true
updateUsersPowerToolsFormat: true
updateUsersHomesFormat: true
banFormatChange: true
updateUsersIgnoreListUUID: true
updateUsersStupidLegacyPathNames: true
updateUsersMailList: true
updatePurgeBrokenNpcAccounts: true
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
L ÎÀé¤3R¹Äg€s¨
+186
View File
@@ -0,0 +1,186 @@
# Determines the value of items on the server.
# Items not listed here cannot be sold.
# Setting the value to 0 sells items for free; set to -1 or remove the item to disable selling.
# Prices can be set in this file or via the '/setworth' command in-game.
worth:
# This will set the worth of all logs to '2'.
log: 2.0
# This will work similar to the above syntax.
wool:
'0': 20
# This will only allow selling leaves with datavalue '0' and '1'.
leaves:
'0': 1.0
'1': 1.0
# This will allow the selling of all, but sells '0' slightly cheaper.
sapling:
'0': 2.0
'*': 2.5
stonebutton: 6.0
wood: 0.50
arrow: 3.50
diamondpickaxe: 650.0
rawfish: 5.0
minecart: 23.0
leatherchestplate: 85.0
storageminecart: 30.0
feather: 3.0
goldchestplate: 6.5
mushroomsoup: 4.5
bread: 30.0
stationarywater: 1.0
workbench: 2.5
stonehoe: 2.5
brownmushroom: 2.0
mossycobblestone: 90.0
diamondhoe: 400.0
woodsword: 1.0
torch: 4.0
grass: 1.0
poweredminecart: 32.0
snowball: 1.0
goldenapple: 100.0
leatherleggings: 75.0
diamondaxe: 650.0
slimeball: 50.0
fence: 1.0
stonespade: 1.5
claybrick: 5.0
noteblock: 36.0
ironaxe: 22.0
coalore: 15.0
clayball: 3.0
fishingrod: 10.0
ironhoe: 22.0
goldrecord: 100.0
ironpickaxe: 22.0
irondoor: 22.0
bucket: 22.0
redrose: 2.0
grilledpork: 7.0
gravel: 1.0
wooddoor: 3.0
chainmailhelmet: 40.0
ironchestplate: 22.0
diamondblock: 2000.0
diamondhelmet: 1000.0
goldhelmet: 6.0
redstonetorchon: 32.0
ironspade: 22.0
furnace: 8.5
ironsword: 22.0
dispenser: 58.0
woodaxe: 2.0
seeds: 2.0
painting: 25.0
woodplate: 1.0
redstoneore: 30.0
diamondspade: 210.0
waterbucket: 40.0
water: 1.0
bedrock: 100.0
irondoorblock: 15.0
goldhoe: 6.0
sand: 1.0
goldsword: 6.0
stoneaxe: 3.0
bookshelf: 140.0
ironblock: 190.0
jackolantern: 56.0
boat: 3.0
diamondchestplate: 1750.0
redstonewire: 30.0
redmushroom: 2.0
string: 5.0
stoneplate: 6.0
wallsign: 1.0
cactus: 10.0
sulphur: 20.0
rails: 22.0
ironore: 18.0
leatherhelmet: 52.0
stone: 3.00
egg: 1.0
diamondore: 200.0
woodhoe: 2.0
goldleggings: 6.0
chainmailleggings: 50.0
yellowflower: 2.0
ironhelmet: 22.0
obsidian: 130.0
dirt: 1.0
leather: 10.0
leatherboots: 42.0
lever: 1.0
cobblestone: 1.0
cake: 180.0
woodstairs: 1.0
ironingot: 22.0
goldore: 45.0
pumpkin: 50.0
bed: 68.0
watch: 6.0
ironleggings: 22.0
sign: 1.5
doublestep: 1.0
woodpickaxe: 2.0
stonepickaxe: 4.0
chainmailboots: 30.0
diamondleggings: 1500.0
cookedfish: 7.0
saddle: 100.0
cobblestonestairs: 1.5
tnt: 100.0
glowingredstoneore: 30.0
apple: 10.0
woodspade: 1.0
goldingot: 105.0
diode: 110.0
soil: 1.0
clay: 12.0
goldblock: 450.0
stick: 0.25
paper: 10.0
brick: 21.0
stationarylava: 1.0
chest: 4.0
sandstone: 3.0
goldpickaxe: 6.0
compass: 22.0
sugarcane: 10.0
diamondsword: 420.0
goldboots: 6.0
sponge: 80.0
stonesword: 2.5
coal: 15.0
goldaxe: 6.0
bone: 2.0
diamond: 200.0
glass: 3.00
goldspade: 6.0
lapisblock: 950.0
lavabucket: 40.0
wheat: 9.0
ladder: 0.5
sugarcaneblock: 15.0
bowl: 0.50
chainmailchestplate: 40.0
diamondboots: 850.0
lapisore: 100.0
lava: 25.0
milkbucket: 40.0
redstone: 32.0
greenrecord: 100.0
inksack: 10.0
glowstonedust: 10.0
book: 45.0
bow: 15.0
ironboots: 22.0
step: 1.5
sugar: 10.0
+120
View File
@@ -0,0 +1,120 @@
Settings:
# Default language
# Translations are crowdsourced from the community!
# For supported languages, see https://loohpjames.com/imageframe/languages/
# To contribute your language, visit https://crowdin.com/project/imageframe/
Language: en_us
# Date format used where a time based variable is displayed
DateFormat: dd/MM/yyyy HH:mm:ss zzz
MapItemFormat: '&f{Name} &7({X}, {Y})'
# Whether empty maps are required to create image maps when not in creative
RequireEmptyMaps: true
# Max size of an image map
MaxSize: 100
# When enabled, Only websites from the list below is allowed to be shown through in-game maps
RestrictImageUrl:
Enabled: false
Whitelist:
- https://i.imgur.com
- http://i.imgur.com
- https://storage.googleapis.com
- http://storage.googleapis.com
- https://cdn.discordapp.com
- http://cdn.discordapp.com
- https://media.discordapp.net
- http://media.discordapp.net
- https://textures.minecraft.net
- http://textures.minecraft.net
# If the image is larger than the defined size, it won't be downloaded for preview
# (In Bytes)
MaxImageFileSize: 52428800
# If an image takes more than this time to load, it will be rejected
# (In Seconds)
MaxProcessingTime: 60
# How many images should be processed in parallel
# Updating this option requires a server restart
ParallelProcessingLimit: 1
# Max amount of image maps a player in the following groups can create
# Setting -1 means unlimited
# To add a player to a group, give the permission "imageframe.createlimit.<group>"
# For example "imageframe.createlimit.vip"
# Players with no groups will be treated as "default" unless they have "imageframe.createlimit.unlimited"
PlayerCreationLimit:
default: 10
vip: 15
moderator: 20
# Max amount of markers on an individual map
MapMarkerLimit: 20
# How many map packets can be sent to a player in 1/20 of a second
# You can turn this down if you are facing network issues
# However maps might take longer to show to a player
# To disable the rate limit, set to -1
MapPacketSendingRateLimit: -1
# Exempt certain map ids from deletion if their ImageFrame map is deleted
# Values can be map ids (For example: "13") or ranges (inclusive) of map ids (For example: "10-13")
ExemptMapIdsFromDeletion:
- '-1'
# This option should only be useful to developers and people who knew what they are doing
MapRenderersContextual: false
# Changing this option requires a restart
HandleAnimatedMapsOnMainThread: false
SendAnimatedMapsOnMainThread: false
# Valid modes are "DYNAMIC" and "MANUAL_PERSISTENT"
# DYNAMIC: load and unload image cache depending on whether a player is viewing
# May use more CPU and image might appear with a slight delay
# MANUAL_PERSISTENT: image cache stay loaded from server start
# May use more memory
# Changing this setting requires a restart
CacheControlMode: MANUAL_PERSISTENT
# Set this to true if you have corrupted 0 size map data in the world folder (not the ImageFrame plugin folder)
# Set this to false if your system's file IO is slow
TryDeleteBlankMapFiles: false
CombinedByDefault: false
# ImageFrame's convenient upload system where you can upload directly through an embedded web server
UploadService:
# Changing this value requires a restart
Enabled: true
# This is only used for displaying to the end user
DisplayURL: https://imageframe.hoshifu.ru
WebServer:
# Address in which the webserver binds to, defaults to 0.0.0.0
# Use 127.0.0.1 to limit to local access
# Changing this value requires a restart
Host: 0.0.0.0
# Port in which the webserver is hosted, make sure it is not blocked by your firewall
# Changing this value requires a restart
Port: 8517
# ImageFrame's complimentary mod where you can see images in its native resolution in full color
ImageFrameClient:
# Changing this value requires a restart
Enabled: true
# ImageFrame's built in survival friendly way of making invisible item frames
InvisibleFrame:
# Survival friendly way to get invisible item frames by splashing dropped items with invisibility potions
# Set to -1 for unlimited
# Set to 0 to disable
MaxConversionsPerSplash: 8
# Should empty invisible item frames glow
# Existing frames are not updated until they are interacted with
GlowEmptyFrames: true
# Which storage system should ImageFrame use
# Changing this section requires a restart
Storage:
# Supported storage systems: file (Default), jdbc (Currently only supports MYSQL dialect)
Type: file
# Options are only used if the storage system type requires it, such as jdbc
Options:
JdbcUrl: jdbc:mysql://localhost:3306/imageframe
Username: imageframe
Password: imageframe
# In Seconds
ActivePollInterval: 5
Hooks:
ViaVersion:
# Enable this if your players below 1.13 is having network issues
DisableSmoothAnimationForLegacyPlayers: false
DebugLogging: false
# Enable update notifications for admins
Updater: true
+96
View File
@@ -0,0 +1,96 @@
config-version: "2"
datastore:
# Database type, use one of this: SQLITE, MYSQL
database-type: "SQLITE"
host: ""
port: 0
database: ""
user: ""
password: ""
settings:
password:
# Characters that are required in the password
required-character: ""
# Decline the registration if the player's password if too common
decline-on-common-password: true
# Specify the password length rules
password-length:
min: 8
max: 32
# Specify the maximum attempts for authenticating, if the player enters the password X times
# wrong, they will be kicked.
# If this is set to 0, this feature will be disabled
max-login-attempts: 3
# Amount of seconds the players will have for doing /register or /login before getting kicked
# If this is set to 0, this feature will be disabled
authentication-timeout: 0
sessions:
# If this is enabled, a cracked player won't need to
# do the login authentication if that player is from
# the same ip and the session is not invalid
# Warning: If your server is running behind a proxy or tunnel
# that does not forward the player's real IP address, disable
# this feature. Otherwise, all players may appear to have the
# same IP address (e.g. 127.0.0.1 or 192.168.x.x).
enabled: true
# Session duration (in hours)
session-duration: 24
proxy:
# When enabled, LoginTo will delegate player authentication to the proxy.
# Instead of authenticating players locally, it checks the database to verify
# if the player was already logged in by the proxy. If not, movement is blocked.
# Both this server and the proxy must use the same MySQL database.
bridge-bukkit-proxy: false
premium:
# If this is enabled, any premium account would be able to
# join the server without doing /login or /register.
# If you are making a java and bedrock server and want this
# feature, make sure to install floodgate, otherwise every
# bedrock player without a java account will be kicked.
# If this setting is changed, a full server restart is required,
# not just a plugin reload
enabled: true
# Name's cache duration (in hours), if this is set to 0,
# everytime the same player joins the server, LoginTo will
# need to do 2 http request instead of 1 (this can slow down
# the authentication process)
cache-duration: 24
# If this is enabled, the plugin will generate a random password
# for premium and bedrock players
auto-register: true
# A list of player's name to skip during the premium authentication.
premium-bypass-list: []
spawn-setting:
# If this is enabled, the player will get teleported and those cords
# when they leave (the player will see the teleport on join)
enabled: false
# Change those cords so the players won't die after the registration
cords:
x: 0
y: 64
z: 0
world: "world"
# If this is enabled, after the login, the player will be teleported
# at the location where they left
restore-previous-location: true
otp:
# If you want players to create and use an otp code for changing their
# password, leave this on. If this gives you any problem or you simply
# don't want this, turn this off.
# (If this feature is changed, it requires the server to be restarted)
enabled: true
# Use the legacy changepassword command?
# The syntax will be: /changepassword <old_password> <new_password>
# If the otp code is disabled, this will automatically be enabled
legacy-changepass-command: false
# Check for an update every hour
check-for-updates: true
# If you want to support the plugin, consider leaving this on, this watermark
# will only appear once for every player
show-watermark: true
# If this is enabled, LoginTo will download a version of packetevents to use.
# If you are having problems with this, or you already have the packetevents
# plugin installed, turn this off
use-built-in-packetevents: true
@@ -0,0 +1,175 @@
# LOD Server Support — Paper/Folia server defaults.
# Edit this file, then run /vsslod reload. Settings marked [restart] wait for restart.
# Reload changes policy for new work; existing jobs/reads drain and cache trimming can lag.
# Distances are radii. 1 chunk = 16 blocks; 1 MiB = 1,048,576 bytes.
config_version: 1 # Local settings schema version, independent of the network protocol.
# Serves distant terrain to compatible clients beyond vanilla's view distance.
# This does not increase the server's simulation distance or keep distant chunks ticking.
service:
enabled: true # [restart] Enable the server's LOD service.
require_permission: false # Require both lss.use and vss.use; nodes default to allowed.
# Larger radii reveal more terrain, but cover more columns and can increase
# generation, transfer, cache and disk work. Doubling a radius covers roughly four
# times the area; a large configured radius does not mean it fills instantly.
lod:
distance:
default_chunks: 512 # Fallback for dimensions not listed below; range 1–2048.
by_dimension: # These are fresh-install defaults; migration preserves existing limits.
"minecraft:overworld": 512 # Overworld radius in chunks.
"minecraft:the_nether": 64 # Nether radius in chunks.
"minecraft:the_end": 512 # End radius in chunks.
by_world: {} # Paper world-name overrides; take priority over dimension entries.
# Lets LOD requests create terrain that does not yet exist in the world.
# This costs world-generation CPU time and grows the normal world files, independently
# of the LOD store. With generation off, existing terrain can still be served.
# Higher concurrency can fill missing terrain sooner, but competes with gameplay.
generation:
enabled: true # Generate missing terrain; disabling stops new jobs, existing jobs finish.
concurrency:
global: 40 # Maximum concurrent generations across the server; range 1–512.
per_player: 40 # Maximum per player; cannot exceed the global limit.
timeout_ticks: 1200 # New jobs only; 60 seconds at 20 TPS, longer under lag; range 20–12000.
# Limits and schedules LOD traffic so it shares resources with normal gameplay.
# Bandwidth limits count uncompressed payload work, so they also limit client decode
# work; compressed network traffic can be much smaller. Lower limits slow terrain fill.
network:
bandwidth:
per_player_mib_per_second: 5 # Raw MiB/s before compression; 0 clamps to 1 KiB/s, not unlimited.
global_mib_per_second: 50 # Shared raw MiB/s budget; 0 clamps to 1 KiB/s, not unlimited.
send_queue_limit_per_player: 1024 # Admission ceiling; lowering it lets existing work drain.
ping_backstop: true # Reduce LOD traffic when player latency indicates congestion.
send_pacing: true # Spread LOD sends across ticks to reduce bursts.
yield_to_vanilla: true # Let normal game traffic take transport priority; applies next flush.
# Keeps previously downloaded terrain up to date when the world changes.
# Shorter dirty-broadcast intervals show edits sooner but can send updates more often.
# Region summaries let returning clients validate cached areas without downloading
# every column again; they describe freshness, not the terrain itself.
updates:
# Tick-driven: 200 ticks = 10 seconds at 20 TPS, longer under lag.
dirty_broadcast_interval_ticks: 200 # 0 disables pushes, not invalidation; otherwise 20–6000.
region_summaries: true # Accept new region-validation requests; accepted requests can finish.
storage:
# Reader threads and concurrent reads control pressure on world-file access.
# More parallel reads can improve throughput, but can also compete with gameplay
# for disk and CPU. Automatic sizing accounts for the active read path and store.
disk:
reader_threads: 0 # [restart] 0 = automatic; explicit range 1–64.
max_concurrent_reads: 0 # 0 = automatic, based on the active reader pool and store.
background_priority: true # [restart] Use background-priority reads where supported.
split_background_reads: true # [restart] Separate background read work where supported.
# This RAM cache holds column freshness timestamps, not complete terrain.
# More capacity can avoid repeated timestamp lookups, at the cost of server memory.
# Reducing capacity trims gradually; it does not clear the entire cache on reload.
timestamp_cache_mib_per_dimension: 0 # 0 = automatic from the largest active LOD radius.
# Briefly remembering missing columns avoids repeatedly checking unavailable terrain.
# A longer lifetime can delay another lookup for newly available data on a memo hit.
miss_memo_ttl_seconds: 30 # 0 disables; maximum 60. Changing this clears old miss memos.
# Persistent cache of prepared LOD columns, reused across players and restarts.
# Cache hits reduce repeated world-file parsing, serialization and, when the
# client's format supports reuse, compression. Store reads still use disk I/O.
# Tradeoff: extra disk space and writes as terrain is cached or updated. A fully
# warmed store can be comparable in size to the region files; actual use depends
# on the world and how much terrain has been cached. This is rebuildable data.
# Off still allows normal LOD serving, but loses this reuse. Disabling the store
# does not delete its existing files or reclaim their disk space.
lod_store:
enabled: true # [restart] Fresh installs enable this; migration preserves old behavior.
# Smaller limits retain less prepared terrain, so evicted columns may need
# processing again. This bounds live database data, not total filesystem use:
# SQLite journal files and space awaiting reclamation can add overhead.
# Lowering the cap evicts gradually; reload does not instantly free filesystem space.
max_size_mib: 0 # 0 = unlimited; positive range 64–1,048,576 MiB.
# Periodically recheck saved-world freshness to catch edits without a Bukkit event.
# Shorter intervals find these saved edits sooner but perform more checks.
# Unsaved changes still have to reach the world files before this path can see them.
resweep_interval_seconds: 300 # 0 disables future periodic sweeps; an active sweep can finish.
# Optimized processing paths for turning world terrain into transmitted columns.
# Compression reduces network bytes but costs CPU when a reusable frame is unavailable.
# These are expert troubleshooting switches; their effects depend on the active path.
serialization:
selective_nbt_parse: true # Inactive on Paper's already-parsed NBT path; retained for portability.
nbt_transcode: true # New reads: use the optimized terrain serialization path.
compressed_columns: true # [restart] Compress columns for clients that support it.
# Allows older LOD protocol versions; these numbers are not Minecraft versions.
# Disabling a fallback restricts which clients can connect to the LOD service.
# It does not translate arbitrary modded blocks or replace a version-translation mod.
compatibility:
protocols:
v16: true # [restart] Accept protocol-16 clients.
v18: true # [restart] Accept protocol-18 clients.
v19: true # [restart] Accept protocol-19 clients.
via_mismatch_guard: true # [restart] Guard incompatible translated-protocol sessions.
# Prevents distant terrain data from revealing blocks hidden by anti-xray policy.
# Auto follows supported detected policy; forcing off can expose hidden terrain.
# The block list and height below are fallbacks, not overrides for an adopted engine policy.
privacy:
xray:
mode: "auto" # [restart] "auto", "on" or "off"; auto follows detected anti-xray policy.
max_y_blocks: 64 # [restart] Fallback mask applies below this world Y coordinate.
hidden_blocks: # [restart] Fallback list when engine policy is unavailable; [] hides none.
- "minecraft:copper_ore"
- "minecraft:deepslate_copper_ore"
- "minecraft:raw_copper_block"
- "minecraft:gold_ore"
- "minecraft:deepslate_gold_ore"
- "minecraft:iron_ore"
- "minecraft:deepslate_iron_ore"
- "minecraft:raw_iron_block"
- "minecraft:coal_ore"
- "minecraft:deepslate_coal_ore"
- "minecraft:lapis_ore"
- "minecraft:deepslate_lapis_ore"
- "minecraft:mossy_cobblestone"
- "minecraft:obsidian"
- "minecraft:chest"
- "minecraft:diamond_ore"
- "minecraft:deepslate_diamond_ore"
- "minecraft:redstone_ore"
- "minecraft:deepslate_redstone_ore"
- "minecraft:clay"
- "minecraft:emerald_ore"
- "minecraft:deepslate_emerald_ore"
- "minecraft:ender_chest"
# Sends lightweight distant-player snapshots beyond normal entity tracking range.
# This does not keep distant entities ticking. Larger ranges and more frequent
# updates can increase server work, traffic and client rendering work.
# "opt_in" shares only targets whose clients explicitly allow sharing; "on" can
# also include vanilla players. Exclusions, visibility rules and opt-outs still apply.
far_players:
mode: "on" # "off", "opt_in" or "on"; all modes honor exclusions and sharing opt-outs.
update_interval_ticks: 10 # 10 ticks = two updates/second at 20 TPS; range 2–100.
distance:
min_blocks: 0 # 0 = no additional inner ring; cannot exceed max_blocks.
max_blocks: 2048 # Server visibility ceiling; range 128–16384 blocks.
send_spectators: false # Include spectator targets if other privacy checks allow them.
excluded_players: [] # Player names or UUIDs never shared; kept out of diagnostic exports.
# Bukkit event hooks invalidate cached LODs after world edits. Adding frequent
# events can improve coverage but increase work; edits without a matching event
# may remain stale until saved terrain is checked by the store's periodic resweep.
paper:
update_events: # [restart] Bukkit events used to detect changed terrain.
- "org.bukkit.event.block.BlockPlaceEvent"
- "org.bukkit.event.block.BlockBreakEvent"
- "org.bukkit.event.block.BlockExplodeEvent"
- "org.bukkit.event.entity.EntityExplodeEvent"
- "org.bukkit.event.block.BlockBurnEvent"
- "org.bukkit.event.block.BlockFadeEvent"
- "org.bukkit.event.block.BlockFormEvent"
- "org.bukkit.event.block.BlockGrowEvent"
- "org.bukkit.event.block.BlockSpreadEvent"
- "org.bukkit.event.block.LeavesDecayEvent"
- "org.bukkit.event.block.BlockPistonExtendEvent"
- "org.bukkit.event.block.BlockPistonRetractEvent"
- "org.bukkit.event.entity.EntityChangeBlockEvent"
- "org.bukkit.event.world.StructureGrowEvent"
+1 -1
View File
@@ -35,7 +35,7 @@ settings:
user-cache-size: 1000
moved-wrongly-threshold: 0.0625
moved-too-quickly-multiplier: 10.0
timeout-time: 60
timeout-time: -1
restart-on-crash: true
restart-script: ./start.sh
save-user-cache-on-stop-only: false