플러그인 서버
바닐라 특성만 놓고 보면 플러그인 서버는 바닐라 테크니컬 서바이벌에 잘 맞지 않는다. Paper 문서에도 이렇게 적혀 있다.
Unfortunately, it currently is not possible to get a 100% Vanilla experience in Paper.
안타깝게도 현재 Paper에서는 100% 바닐라 경험을 얻을 수 없다.
그래도 넓은 플러그인 생태계와 괜찮은 최적화 덕분에 가벼운 테크니컬 서바이벌 정도라면 플러그인 서버를 쓰는 사람도 있다. 이 문서는 서버 설정을 조정해 플러그인 서버에서 바닐라 특성과 관련 동작을 최대한 복원하고, 가벼운 테크니컬 서바이벌이나 바닐라 서바이벌 경험에 가깝게 만드는 방법을 다룬다.
Paper
섹션 제목: “Paper”Paper 월드 기본 설정
섹션 제목: “Paper 월드 기본 설정”chunks: # 청크 언로드를 지연할 시간. 10h(시간), 25m(분)처럼 숫자 뒤에 단위 하나를 붙인다. d, h, m, s 단위를 지원한다 # 0s로 설정하면 엔더 진주 정체형 귀환 장치를 쓸 수 있다 delay-chunk-unloads-by: 0s # 틱당 자동 저장할 최대 청크 수 max-auto-save-chunks-per-tick: 200collisions: # 엔티티가 너무 많아 끼임(cramming)이 발생했을 때 플레이어가 피해를 받을지 여부 allow-player-cramming-damage: true # 이 수에 도달하면 서버가 엔티티 충돌 처리를 멈춘다 # 2147483647이나 매우 큰 값으로 설정하면 밀집한 엔티티 충돌을 최대한 처리한다. 성능이 떨어질 수 있다 max-entity-collisions: 2147483647entities: behavior: # 벌이 벌집을 떠나려다 실패했을 때 쿨다운을 둘지 여부 # 바닐라에서 벌은 벌집이 블록에 막혔는지와 날씨를 계속 확인해 떠날 수 있는지 판단한다 # false로 설정하면 벌집을 막던 울타리 문이 열리는 등 조건이 맞는 즉시 벌이 벌집을 떠난다 cooldown-failed-beehive-releases: false # 높이가 같은 떨어진 아이템끼리만 합칠지 여부 only-merge-items-horizontally: true # 크리에이티브 모드 플레이어 주변에서 팬텀 스폰을 막을지 여부 phantoms-do-not-spawn-on-creative-players: false # 팬텀이 오랫동안 잠을 자지 않은 플레이어만 공격할지 여부 phantoms-only-attack-insomniacs: false # 엔티티가 갇혔을 때 POI를 다시 찾기까지의 쿨다운(단위: 틱) # disabled로 설정하면 추가 쿨다운을 두지 않는다 stuck-entity-poi-retry-delay: disabled spawning: # 화살이 사라지기까지의 최대 시간(단위: 틱) # disabled로 설정하면 계속 움직이는 화살이 제거되지 않아, 이 메커니즘을 이용한 청크 로더 등의 장치를 쓸 수 있다 # 대신 플레이어가 이 메커니즘으로 렉 유발 장치를 만들 수도 있다 max-arrow-despawn-invulnerability: disabled # 스포너에서 나온 몹과 기타 엔티티를 전역 몹 스폰 한도에 포함할지 여부 count-all-mobs-for-spawning: true duplicate-uuid: # UUID가 중복된 엔티티를 처리하는 방식. 다음 값을 지원한다 # SAFE_REGEN(UUID를 새로 부여하고, 비슷한 엔티티면 삭제) # DELETE(엔티티 삭제) # NOTHING(처리하지 않고 로그도 남기지 않음) # WARN(처리하지 않고 로그만 남김) mode: NOTHING # 떨어지는 블록에서 특정 NBT 데이터를 제거할지 여부(일부 모험 맵은 이 옵션을 꺼야 하지만, 공개 서버에서는 끄는 것을 권장하지 않는다) filter-bad-tile-entity-nbt-from-falling-blocks: false # 아이템의 EntityTag에서 제거할 NBT 태그 목록. 형식은 바닐라 명령어에서 쓰는 것과 같다 # 빈 목록으로 설정하면 제거하지 않는다 filtered-entity-tag-nbt-paths: [] # 몹 스폰 한도를 플레이어별로 계산할지 여부(켜면 몹이 고르게 분포하고 한 플레이어가 스폰 한도를 독차지하지 않는다) # false로 설정하면 바닐라 스폰 메커니즘을 따른다 per-player-mob-spawns: falsefixes: # 떨어진 아이템이 벽을 사이에 두고 합쳐지는 문제를 고칠지 여부 # spigot.yml의 merge-radius.item 값이 클 때만 사용을 권장한다 # true로 설정. 바닐라 동작은 아니지만 테크니컬 장치에 도움이 될 수 있다 fix-items-merging-through-walls: truehopper: # 호퍼가 가득 찼을 때 짧은 쿨다운을 둬서 새 아이템을 계속 빨아들이려 하지 않게 할지 여부 cooldown-when-full: falsemaps: # 지도 하나에 허용되는 최대 커서(마커) 수. 마커가 너무 많으면 클라이언트 렉이 생긴다 item-frame-cursor-limit: 2147483647misc: # 엔더 드래곤 부활 전 엔드 수정 설치 위치를 확인하는 최적화를 끌지 여부 # true로 설정하면 원격으로 엔더 드래곤을 부활시키거나 드래곤 학살포 같은 장치를 쓸 수 있다 allow-remote-ender-dragon-respawning: true # 블록 업데이트 시 주변 몹의 길찾기도 업데이트할지 여부 # true로 설정하면 블록 변경에 따른 길찾기 업데이트에 크게 의존하는 테크니컬 장치가 정상 동작한다 update-pathfinding-on-block-update: truescoreboards: # 플레이어가 아닌 엔티티를 항상 스코어보드 팀에 속한 것으로 볼지 여부 # true로 설정하면 일부 데이터팩 기능과 호환된다 allow-non-player-entities-on-scoreboards: true # 바닐라 스코어보드의 플레이어 이름 색상을 쓸지 여부(바닐라 클라이언트용 모험 맵에 유용하다) # true로 설정하면 일부 데이터팩 기능과 호환된다 use-vanilla-world-scoreboard-name-coloring: trueunsupported-settings: # 월드에 플레이어나 강제 로드 청크가 없을 때 그 월드의 틱 연산을 멈출지 여부 disable-world-ticking-when-empty: true # 무적 엔드 수정 버그(MC-108513)를 고칠지 여부 fix-invulnerable-end-crystal-exploit: falsePaper 전역 설정
섹션 제목: “Paper 전역 설정”commands: # Tab 자동 완성 결과가 없을 때 접속 중인 플레이어 이름 목록을 보여줄지 여부 suggest-player-names-when-null-tab-completions: false # /time 명령어를 모든 월드에 적용할지 여부. 아니면 실행한 사람이 있는 월드에만 적용된다 time-command-affects-all-worlds: trueitem-validation: book: # 책 저자 이름 최대 길이(단위: 글자) author: 214748364 # 책 최대 페이지 수(단위: 글자) page: 2147483647 # 책 제목 최대 길이(단위: 글자) title: 2147483647 book-size: # 책 한 페이지에 허용되는 최대 바이트 수 # disabled로 설정하면 제한을 없앤다 page-max: disabled # 아이템 표시 이름 최대 길이(단위: 글자) display-name: 2147483647 # 아이템 설명(lore) 한 줄의 최대 길이(단위: 글자) lore-line: 2147483647 # 책 안의 명령어 선택자를 해석할지 여부(켜면 크리에이티브 모드 아이템을 줄 때 서버 크래시가 날 수 있다) resolve-selectors-in-books: truemisc: # 엔드의 초원거리 지형 생성 문제(MC-159283)를 고칠지 여부 # false로 설정하면 엔드 링이 생성된다 fix-far-end-terrain-generation: false # 틱당 허용되는 최대 접속 플레이어 수. 초과하면 접속이 지연된다(bukkit.yml의 연결 스로틀과는 별개) max-joins-per-tick: 2147483647packet-limiter: # 아래 all-packets와 overrides에 있는 패킷의 interval을 -1로 설정하면 # 프린터, 빠른 조합 등 테크니컬 보조 모드의 기능을 쓸 수 있다 all-packets: # 최대 패킷 속도가 적용되는 시간 간격(단위: 초) interval: -1 # 특정 패킷의 속도 제한이 적용되는 시간 간격 # (상황에 따라 특정 패킷의 속도 제한만 끌 수 있다) overrides: minecraft:place_recipe: interval: -1spam-limiter: # 받은 패킷이 이 기준을 넘으면 스팸으로 보고 무시한다 # disabled로 설정하면 기준을 없앤다 incoming-packet-threshold: disabledunsupported-settings: # 머리 없는 피스톤 생성을 허용할지 여부(주로 부술 수 없는 블록을 부수는 데 쓰인다) allow-headless-pistons: true # 바닐라 버그로 기반암, 엔드 포털 틀, 엔드 포털 블록 등 부술 수 없는 블록을 부수는 것을 허용할지 여부 allow-permanent-block-break-exploits: true # TNT, 카펫, 레일 복사를 허용할지 여부(모래는 포함하지 않는다) allow-piston-duplication: true # 엔드 포털 버그를 이용한 텔레포트를 허용할지 여부 # true로 설정하면 모래 복사를 쓸 수 있다 allow-unsafe-end-portal-teleportation: true # Paper 아이템 난독화의 대형 아이템 직렬화기가 아래 아이템 컴포넌트를 건너뛸지 여부 # 아래처럼 설정하면 일부 데이터팩의 아이템 모델이 바닐라와 똑같이 보인다 oversized-item-component-sanitizer: dont-sanitize: - minecraft:container - minecraft:charged_projectiles - minecraft:bundle_contents # 사용자 이름을 검증할지 여부 # false로 설정하면 특수 문자가 들어간 이름을 허용하지만, 명령어나 플러그인에 문제가 생길 수 있다 perform-username-validation: false # 철사 덫 갈고리 설치 검증을 건너뛸지 여부 # true로 설정하면 철사 덫 갈고리 복사를 쓸 수 있다 skip-tripwire-hook-placement-validation: true # 방패로 막을 때 바닐라의 피해 틱 계산을 건너뛸지 여부 # # 예전부터 많은 PVP 플레이어가 Spigot과 그 하위 포크에 오래 있던 문제를 이용해 왔다. # 방패로 막을 때 피해 무적 프레임이 적용되지 않는데, 이는 바닐라 동작과 다르다 # 플레이어는 이를 이용해 상대의 방어를 잠시 "무력화"하고 공중으로 띄워 보낼 수 있었고, 1.9+ PVP의 독특한 플레이 방식이 되었다 # # true로 설정하면 이 방패 스턴(Shield Stunning) 메커니즘을 쓸 수 있다 skip-vanilla-damage-tick-when-shield-blocked: true # 플레이어가 동작할 때 장비를 업데이트할지 여부 # false로 설정하면 속성 스와핑 버그를 쓸 수 있다 update-equipment-on-player-actions: falsespigot.yml 설정
섹션 제목: “spigot.yml 설정”world-settings: default: # 엔티티 활성화 범위 # 전체 또는 일부 몹을 -1로 설정하면 해당 몹의 활성화 범위 제한을 무시한다 entity-activation-range: animals: -1 monsters: -1 raiders: -1 misc: -1 water: -1 villagers: -1 flying-monsters: -1 # 엔티티 추적 범위 # Spigot이 몹 추적 범위를 설정할 수 있게 바꾼 침습적인 변경 때문에 바닐라 동작으로 그대로 되돌릴 수는 없다 # 전체 또는 일부 몹을 아래 추천값으로 설정하면 바닐라 추적 범위에 최대한 가까워진다 entity-tracking-range: players: 512 animals: 160 monsters: 256 misc: 160 display: 160 other: 512 # 서버가 틱당 처리하는 TNT 폭발 횟수 # 0 이하로 설정하면 제한을 없앤다 # 또는 2000처럼 아주 큰 값으로 설정하면 월드 이터처럼 TNT 폭발이 대량으로 일어나는 테크니컬 장치도 정상 동작한다 max-tnt-per-tick: 0bukkit.yml 설정
섹션 제목: “bukkit.yml 설정”settings: # 몹 스폰 한도 # bukkit.yml의 기본값이 바닐라 스폰 한도와 같다 # 스폰이 너무 적어 농장 효율이 낮다고 느껴지면 해당 몹 분류의 스폰 한도를 적당히 올려도 된다 spawn-limits: monsters: 70 animals: 10 water-animals: 5 water-ambient: 20 water-underground-creature: 5 axolotls: 5 ambient: 15레드스톤 최적화
섹션 제목: “레드스톤 최적화”Mojang은 1.21.2의 첫 스냅샷 24w33a에서 레드스톤 가루의 신호 업데이트 방식을 바꿨다(실험적 기능이긴 하다).
코드를 보면 Mojang의 최적화 방식은 Alternate Current와 매우 비슷하므로 서버에서 켜는 것을 고려해 볼 만하다. 레드스톤 최적화를 참고하자.
Purpur
섹션 제목: “Purpur”Purpur는 더 많은 설정 항목을 제공한다. 아래 항목을 조정해 일부 바닐라 특성을 복원할 수 있다.
settings: # TPS 따라잡기(catch-up)를 켤지 여부 # false로 설정하면 TPS가 떨어졌을 때 몹이 갑자기 빨라져 게임 경험을 해치는 일을 막는다 tps-catchup: falseworld-settings: default: settings: entity: # 공유 난수 생성기를 쓸지 여부 # false로 설정하면 RNG 예측을 쓸 수 있다 shared-random: false gameplay-mechanics: player: # 1.21.4 스냅샷 24w44a 이전의 주민 보이드 거래(MC-50614)를 되살릴지 여부 # true로 설정하면 주민이 상호작용 범위를 벗어나도 거래 창이 닫히지 않는다 allow-void-trading: trueLeaves(추천)
섹션 제목: “Leaves(추천)”Leaves는 테크니컬 플레이어에 초점을 맞춘 Minecraft 서버로, 업스트림에서 망가진 바닐라 특성을 복원하는 것을 목표로 한다. 현재 플러그인 서버 코어 중 테크니컬 서바이벌에 가장 잘 맞는 코어다.
설정 파일 leaves.yml은 성능 최적화, 버그 수정, 바닐라 메커니즘 복원, 플레이 기능 강화 등 테크니컬 서바이벌 친화적인 다양한 설정 항목을 제공한다.
각 설정의 사용법은 Leaves 문서를 읽고, 서버에 필요한 대로 조정하자.
Leaf
섹션 제목: “Leaf”Leaf는 Paper의 포크로, 성능이 매우 높으면서(Folia를 빼면 Paper 계열 중 사실상 가장 빠르다) 바닐라 특성을 크게 망가뜨리지 않는다.
더 많은 플레이어를 받고 싶다면 Leaf를 고려해 보자.
바닐라 동작에 맞추기 위한 설정 조정 방법은 Leaf 문서를 참고하자. 나머지 설정 파일은 위 내용을 참고해 수정하면 된다.
Luminol
섹션 제목: “Luminol”Luminol은 Folia의 포크로, Folia보다 성능이 좋고 더 많은 특성을 복원할 수 있다.
[fixes.poi_range_fixes] # 청크가 로드되지 않았을 때 주민이 같은 POI를 두고 경쟁하는 계산을 하지 않을지 여부 # true로 설정하면 대형 철 농장처럼 주민이 들어간 대형 장치로 인한 렉 문제 일부가 해결된다 # 자세한 내용은 https://github.com/PaperMC/Folia/issues/292 참고 do_not_compete_poi_if_unloaded = true
[fixes.allow_unsafe_teleportation] # 엔드 포털 버그를 이용한 텔레포트를 허용할지 여부 # true로 설정하면 모래 복사를 쓸 수 있다 # 문제가 생길 수 있다. 자세한 내용은 https://github.com/PaperMC/Folia/issues/297 참고 enabled = true
[fixes.collision_behavior] # 서버가 사용할 엔티티 충돌 계산 방식 # 선택지: # VANILLA - 바닐라 계산 방식만 사용. 성능이 떨어질 수 있지만 바닐라 동작과 완전히 같다 # BLOCK_SHAPE_VANILLA - 블록에는 Paper 계산 방식, 나머지는 바닐라 계산 방식을 사용. 최적화와 바닐라 동작을 모두 챙긴다 # PAPER - Paper 계산 방식만 사용. 최적화는 좋지만 일부 바닐라 동작이 망가진다 mode = "BLOCK_SHAPE_VANILLA"
[fixes.fix_high_velocity_issue] # 고속 엔티티가 여러 틱 리전을 가로질러 이동하면서 서버 크래시가 나는 문제를 고칠지 여부 # true로 설정하면 진주포처럼 엔티티가 빠르게 먼 거리를 이동해야 하는 장치를 쓸 수 있다 enabled = true
[fixes.use_vanilla_random_source] # 엔티티에 바닐라 난수 생성기를 쓸지 여부 # true로 설정하면 RNG 예측을 쓸 수 있다 enable_for_player_entity = true
[function.tripwire_dupe] # 1.21.2 스냅샷 24w33a와 24w36a에서 수정된 철사 덫 복사 버그(MC-59471)를 되살릴지 여부 enabled = true # 선택지: # VANILLA20 # VANILLA21 # MIXED behavior_mode = "VANILLA21"
[misc.disable_moved_wrongly_threshold] # 엔티티 이동 속도 제한을 끌지 여부 enabled = true
[misc.force_disable_packet_limiter_of_paper] # Paper 내장 패킷 속도 제한을 끌지 여부 # true로 설정하면 프린터, 빠른 조합 등 테크니컬 보조 모드의 기능을 쓸 수 있다 # 패킷 속도 제한을 끄면 패킷 전송 공격으로 서버 렉이 걸릴 위험이 있으니 신중히 생각하자! force_disable = true
[optimizations.lithium_sleeping_block_entity] # Lithium의 블록 엔티티 최적화를 쓸지 여부 # true로 설정하면 바닐라 특성을 유지하면서 호퍼 등 블록 엔티티의 성능을 높인다 enabled = true스레드 수도 조정해야 한다. 잘 알려져 있듯 Folia의 기본 스레드 수는 매우 보수적이라, 코어 하나가 고생하는 동안 나머지 여덟 개는 구경만 하는 상황이 생긴다.
Paper 전역 설정에서 threaded-regions.threads를 찾자. 보통 청크 틱 스레드 수는 물리 CPU 코어 수의 80% 정도로 잡으면 된다.
Lophine
섹션 제목: “Lophine”Lophine은 Luminol 기반 포크로, Luminol보다 테크니컬 서바이벌에 쓸모 있는 기능과 설정 가능한 바닐라 특성이 더 많다. Folia에서 테크니컬 관련 메커니즘을 더 많이 구현하는 것이 목표다.
[experiment.redstone] # 1.19 이전의 즉시 블록 업데이트 메커니즘을 되살릴지 여부 instant-block-updater = true # ClassCastException을 이용한 업데이트 억제를 허용할지 여부 cce-update-suppression = true # 다음 메커니즘을 되살릴지 여부: # 1.20 이전: 레드스톤 가루가 주변의 열린 다락문 위에 있는 레드스톤 가루와 연결되지 않음 # 1.20.2 이전: 레드스톤 가루, 레드스톤 중계기, 레드스톤 비교기가 아래쪽에서 상태 업데이트를 받아도 부착 여부를 확인하지 않음 redstone-ignore-upwards-update = true
[function.old-feature] # 1.21.4 이전 메커니즘을 되살릴지 여부: 플레이어가 접속한 뒤 몇 초간 피해를 받지 않음 spawn_invulnerable_time = true # 1.21 이전 습격 메커니즘을 되살릴지 여부 # true로 설정하면 대부분의 습격 농장 설계가 다시 동작한다 old_raid_behavior = true # 1.21.2 이전 메커니즘을 되살릴지 여부: 좀비 주민, 허스크, 드라운드, 좀비 피글린이 피해를 받으면 일반 좀비 증원이 스폰됨 old_zombie_reinforcement = true # 1.21.2-1.21.5에서 TNT가 물에 닿았지만 폭발 중심이 물 속이 아닐 때, 블록은 부수지만 떨어진 아이템 엔티티는 파괴하지 않던 특성을 되살릴지 여부 old_explosion_damage_calculator = true # 1.21.4 스냅샷 24w44a 이전의 주민 보이드 거래(MC-50614)를 되살릴지 여부 # true로 설정하면 주민이 상호작용 범위를 벗어나도 거래 창이 닫히지 않는다 villager-void-trade = true
[misc.item-entity] # 아이템의 틱 순서를 기준으로 떨어진 아이템을 합칠지 여부. Spigot이 오래전부터 써 온 기본 동작이다 # # Spigot에서는 나중에 틱되는 아이템 엔티티가 먼저 틱된 엔티티 쪽으로 합쳐진다 # 합치기 반경이 비교적 크면 떨어진 아이템이 예상치 못한 이상한 위치에 끼는 것을 막을 수 있다 # 그래서 떨어진 아이템이 대량으로 나오는 몹 파밍 타워나 레드스톤 장치에 매우 유용하다 # 반면 바닐라에서는 아이템 개수를 기준으로 합치며, 개수가 적은 더미가 많은 더미로 합쳐진다 # # true로 설정. 바닐라 동작은 아니지만 떨어진 아이템 합치기가 일부 테크니컬 장치에 더 잘 맞게 된다 follow-tick-sequence-merge = true