Bỏ qua để đến nội dung

spigot.yml

Phần 3.4Kiểm chứng 2026-07-22

Activation range, merge radius, network threads và thiết đặt theo world.

Trước khi đọc
  • Có số đo Spark trước thay đổi
Hoàn thành khi bạn có thể
  • Nhận biết thiết đặt ảnh hưởng gameplay
  • Tránh giảm tải bằng cách phá cơ chế game
10 đề mục16 hình10 đoạn mã~11 phút đọcXem nguyên tác ↗
Trở về Thiết đặt hiệu năng
Tùy chỉnh cách đọc
Trong trang này9 đề mục
  1. world-settings.default.view-distance
  2. spigot.yml/world-settings.default.mob-spawn-range
  3. spigot.yml/world-settings.default.nerf-spawner-mobs
  4. spigot.yml/world-settings.default.entity-activation-range
  5. spigot.yml/world-settings.default.entity-activation-range.wake-up-inactive
  6. spigot.yml/world-settings.default.merge-radius
  7. spigot.yml/attribute.maxHealth
  8. spigot.yml/commands.spam-exclusions
  9. spigot.yml/netty-threads

Theo tài liệu tham khảo của Paper, sự khác biệt cốt lõi giữa bukkit.ymlspigot.yml nằm ở nguồn gốc kế thừa và phạm vi điều phối hệ thống: Trong khi bukkit.yml đóng vai trò là tệp cấu hình nền tảng chứa các thiết lập di sản từ CraftBukkit, thì spigot.yml lại tập trung vào các lớp tối ưu hóa hiệu suất và tính năng mở rộng chuyên sâu do Spigot phát triển. Trong phân cấp cấu hình của Paper, việc hiểu rõ ranh giới này là điều kiện tiên quyết để quản trị viên kiểm soát luồng Logic từ các tham số máy chủ cơ bản cho đến các tinh chỉnh hiệu năng phức tạp trước khi áp dụng các lớp tối ưu đặc thù trong paper-global.ymlpaper-world-defaults.yml.


world-settings.default.view-distance

view-distance: default
simulation-distance: default
Hai tùy chọn này dùng để ghi đè lên các giá trị tương ứng trong tệp server.properties bạn đã nhập ở trên. Nếu bạn nhập một giá trị cụ thể ở đây, máy chủ sẽ dùng giá trị đó thay vì giá trị trong server.properties. Ngoài ra, quản trị viên cũng có thể tạo cấu hình riêng cho từng world/world_nether/world_the_end để mỗi thế giới có view-distancesimulation-distance khác nhau.

1776693344004.webp


spigot.yml/world-settings.default.mob-spawn-range

Đề xuất: simulation-distance - 1
Tùy chọn này xác định phạm vi (tính theo Chunks) xung quanh người chơi mà máy chủ sẽ thử triệu hồi thực thể. Như đã nói ở phần spawn-limit trong bukkit.yml, bạn có thể chỉnh giá trị này để thay đổi cảm giác mật độ quái nhiều hay ít.
Nguyên tắc chung: Nên đặt tối đa bằng simulation-distance - 1 và tối thiểu là 3, vì những mobs nằm ngoài simulation-distance hoặc sát rìa sẽ không được xử lý (tick), gần như “đứng yên” và trông đần thật sự. Nếu bạn đang dùng simulation-distance mặc định == 10, thì có thể linh hoạt chỉnh mob-spawn-range trong khoảng từ 3 - 8 mà không cần quá cứng nhắc theo quy tắc trên. Nếu đặt mob-spawn-range cao hơn simulation-distance, thực thể sẽ cố xuất hiện ở những khu vực mà máy chủ không xử lý, khiến bạn cảm giác máy chủ chẳng có gì cả. Vì vậy, việc chọn giá trị phù hợp là rất quan trọng để giữ trải nghiệm người chơi ổn định.


spigot.yml/world-settings.default.nerf-spawner-mobs

Đề xuất: true
Tùy chọn này giúp tắt não :ah: của các thực thể được sinh ra từ lồng triệu hồi - Spawner.

Nếu máy chủ của bạn cho phép người chơi lượm được spawner á, việc bật tùy chọn này sẽ góp phần giảm Lag đi đáng kể.
Đồng thời, quản trị viên cũng nên bật thêm spawner-nerfed-mobs-should-jump trong tệp paper-world-defaults.yml để quái vẫn có thể nhảy, giúp một số dạng Mob Farm tiếp tục hoạt động, tránh làm người chơi khóc lóc :t16:
gPabp.jpg
[!?] Việc dùng Silk Touch để lấy Spawner nghe thú vị thật, nhưng khi nhiều Spawner tập trung lại một chỗ, chúng rất dễ trở thành nguồn gây Lag cực lớn cho máy chủ. Để đảm bảo hiệu năng lâu dài, tốt nhất vẫn nên hạn chế số lượng trong một khu vực hoặc tắt hẳn tính năng này.
1776699950887.webp
1777429496756.webp

spigot.yml/world-settings.default.entity-tracking-range
Mã:
Đề xuất:
player: 48
animals: 48
monsters: 48
misc: 32
other: 64
Tùy chọn này quyết định khoảng cách (tính bằng block) mà thực thể sẽ được theo dõi và gửi về phía Client để người chơi có thể nhìn thấy.
render-sheep.png
Paper cung cấp các thiết lập này để bạn chủ động kiểm soát khoảng cách hiển thị từng loại thực thể, thay vì mặc định simulation-distance - 1. Máy chủ mình chuyên về CustomContent/ Modpack/ Datapack tức phần cứng phải đủ mạnh --> do đó, mình có thể tăng không vượt quá mức (simulation-distance - 1) × 16 để tránh gây ảnh hưởng xấu đến hiệu năng:
Mã:
 entity-tracking-range:
players: 128
animals: 32
monsters: 32
misc: 160
display: 160
other: 160
Spark sẽ giúp bạn liệt kê mức độ ảnh hưởng theo danh mục chunk provider tick:
  • tracker stage 1 là quá trình theo dõi entity
  • tracker stage 2 là quá trình gửi cập nhật entity đến client

Nếu chunk provider tick chiếm nhiều tài nguyên, bạn nên ưu tiên giảm tổng số Entity tại bukkit.yml trước, sau đó giảm simulation-distance. Nếu vẫn chưa cải thiện, lúc đó mới cân nhắc giảm entity-tracking-range như giải pháp cuối cùng.

1776634683611.webp

Ngoài ra, Paper cho phép bạn chỉnh riêng khoảng cách theo trục dọc (Y) của thực thể trong trong tệp paper-world-defaults.yml tại mục entities.tracking-range-y. Việc này, giúp bạn kiểm soát cách thực thể xuất hiện hoặc biến mất nhanh hơn theo chiều cao. Các nhóm Entity trong entity-tracking-range được chia như sau:

  1. player: người chơi
  2. monster: quái vật
  3. animal: dân làng, sinh vật dưới nước và động vật
  4. misc: item frame, tranh, bảng, vật phẩm rơi, kinh nghiệm
  5. display: các entity dạng hiển thị của các Plugin chuyên tạo gói tài nguyên
  6. other: tất cả những gì không nằm trong các nhóm trên (ví dụ: armor_stand, end_crystal)
Đảm bảo thay đổi spigot.yml/entity-activation-range với giá trị tương đương entity-tracking-range để quái khum bị ngou trước khi xuất hiện trước mặt ngừi chơi nhen :D

spigot.yml/world-settings.default.entity-activation-range

Mã:
Máy chủ mình:
entity-activation-range:
animals: 8
monsters: 24
raiders: 6
misc: 20
water: 5
villagers: 24
flying-monsters: 48

:anime1:Phần này cực quan trọng vì ảnh hưởng lớn tới các dạng máy Farm phổ biến trong máy chủ của bạn. Tùy chọn entity-activation-range quyết định khoảng cách (tính bằng block) mà thực thể có dùng được não, có vận động gân cốt được hay không. Những Entity nằm ngoài phạm vi này tồn tại như một bóng ma vật vờ không ai để ý tới. Bất kỳ thay đổi nào trong tệp spigot.yml/world-settings.default.entity-activation-range.wake-up-inactive sẽ khiến các dạng máy Farm như Sắt, Dân làng trao đổi sách tự động, Nuôi nhốt Động vật... thay đổi mạnh về sản lượng. Băng ghi hình giải thích chi tiết tại:

https://www.youtube.com/watch?v=UBg8wPtk35U


spigot.yml/world-settings.default.entity-activation-range.wake-up-inactive

Mã:
 Đề xuất:
wake-up-inactive:
  animals-max-per-tick: 3
  animals-every: 2400
  animals-for: 90
  monsters-max-per-tick: 8
  monsters-every: 800
  monsters-for: 100
  villagers-max-per-tick: 1
    villagers-every: 12400
    villagers-for: 40
  flying-monsters-max-per-tick: 4
  flying-monsters-every: 1600
  flying-monsters-for: 100
    villagers-work-immunity-after: 200
    villagers-work-immunity-for: 100
   villagers-active-for-panic: true
  tick-inactive-villagers: false
ignore-spectators: true
Giải thích từng khái niệm tại Entity Activation Range -- cũng là nền tảng để phát triển DEAR sau này. Tùy chọn work immunitywake up inactive được Paper bổ sung nhằm giúp thế giới trong game trở nên “sống” hơn. Cơ chế này cho phép một số thực thể đang ở trạng thái không hoạt động có thể “thức dậy” trong một khoảng thời gian ngắn để thực hiện các hành vi cần thiết. Nhờ đó, những Entity như dân làng vẫn có thể bổ sung lại vật phẩm để trao đổi (restock) hoặc tìm công việc, ngay cả khi trước đó chúng không nằm trong vùng hoạt động đầy đủ. Riêng phần bên dưới, mình có hay áp dụng để giới hạn lại số lượng vật phẩm người chơi máy chủ mình trao đổi được với dân làng và cân bằng với Datapack:
Mã:
villagers-max-per-tick: 2
  villagers-every: 12400
  villagers-for: 40
    tick-inactive-villagers: false
  villagers-work-immunity-after: 200
  villagers-work-immunity-for: 100

:-BThiết lập này sẽ dẫn đến hành vi như sau:
Cứ mỗi 12400 tick, máy chủ sẽ chọn ngẫu nhiên tối đa 2 dân làng đang được tải nhưng đã không hoạt động trong ít nhất 200 tick. Những dân làng này sẽ “thức dậy” trong khoảng 40 tick. Trong thời gian đó, dân làng có thể hoạt động bình thường trong khoảng 100 tick và không bị ảnh hưởng bởi trạng thái “đóng băng” khi ở quá xa người chơi.

28sqaaxenpy21.jpg

Dễ hiểu, Dân làng học nghề lâu + thiết lập tick-inactive-villager: false yêu cầu máy chủ ngừng xử lý đối với những dân làng nằm ngoài "khoảng cách kích hoạt" (activation range) của người chơi. Về mặt kỹ thuật, khi người chơi rời xa khu vực dân làng, máy chủ sẽ đưa chúng vào trạng thái đóng băng để giảm tải; tuy nhiên, điều này dẫn đến hai hệ lụy trực tiếp:

  • Iron Golem Farm sẽ giảm hiệu suất hoặc ngừng hoạt động vì điều kiện để sinh Golem yêu cầu dân làng phải hoạt động, kiểu như hoảng sợ hoặc đi ngủ, giao tiếp.
  • Thời gian làm mới vật phẩm giao dịch (trade cooldown) sẽ bị tạm dừng hoàn toàn nếu không có người chơi AFK gần đấy, dân làng sẽ không bao giờ hồi lại các món đồ đã bán được cả.

Kết quả, tiết kiệm tài nguyên máy chủ và làm chậm lại tiến trình phát triển của người chơi :-B


spigot.yml/world-settings.default.merge-radius

Mã:
Đề xuất:
item: 3.5
exp: 4.0
Tùy chọn này quyết định khoảng cách mà các vật phẩm rơi và kinh nghiệm (Exp Orb) có thể gộp lại với nhau, từ đó giảm số lượng vật phẩm phải xử lý trên mặt đất. Nếu đặt quá cao, người chơi có thể cảm giác vật phẩm hoặc Exp “biến mất” do bị gộp lại. Băng ghi hình giải thích dễ hiểu về cách các hạt EXP được gộp vào với nhau:
Ngoài ra, bạn có thể thiết đặt trong tệp config/paper-world-defaults.yml/entities.behavior.experience-merge-max-value để tùy chỉnh sâu hơn giá trị từng hạt có thể gộp được. Ghi nhớ rằng, giá trị quá lớn sẽ khiến vật phẩm bị bug “xuyên tường” để gộp với nhau, vì mặc định Vanilla không có cơ chế kiểm tra va chạm giữa các loại vật thể này, trừ khi bạn bật tùy chọn fix-items-merging-through-walls của Paper.
  • Tiểu tiết tối ưu hiệu năng
➜ Chỉnh trong tệp config/paper-global.yml
Mã:
misc:
xp-orb-groups-per-area: 60
Tùy chọn này cho phép bạn đặt giá trị cao hơn mặc định (40) để gộp các hạt kinh nghiệm mạnh tay hơn, đặc biệt với những máy Farm có lượng Exp đầu ra siêu lớn.

➜ Chỉnh trong tệp spigot.yml
Mã:
players: disable-saving: false
Nếu bạn đang chạy Proxy có Lobby, bạn nên đặt giá trị này thành true, để tránh việc, dữ liệu người chơi tại máy chủ Lobby này bị lưu mỗi lần thoát ra vào lại.

spigot.yml/attribute.maxHealth

Mã:
attribute:
maxAbsorption: max: 2048.0
maxHealth: max: 9999.0
movementSpeed: max: 1024.0
attackDamage: max: 9999.0
Đây là nơi bạn có thể thiết đặt giới hạn tối đa khả năng một thực thể đạt tới được. Nếu máy chủ của bạn tính phát triển mảng RPG, Dungeon sử dụng MythicsMob, hiển nhiên phải lưu tâm.

spigot.yml/commands.spam-exclusions

Mã:
Đề xuất:
commands: tab-complete: 0
send-namespaced: false
log: false
spam-exclusions:
- /function
1777429344443.webp

.ᐟ.ᐟ Máy chủ bạn triển Datapack lặp lại câu lệnh nhiều? Tùy chọn này cho phép bạn liệt kê các tin nhắn hoặc lệnh sẽ được bỏ qua khỏi bộ lọc spam mặc định. Nếu nội dung chat hoặc lệnh bắt đầu giống với một mục trong danh sách này, thì sẽ không bị tính là Spam. Lưu ý, các lệnh phải có dấu / ở đầu thì mới được nhận diện nha.

spigot.yml/netty-threads

Tham số netty-threads trong spigot.yml quyết định số lượng luồng (threads) CPU được cấp phát cho Netty – thư viện I/O bất đồng bộ chịu trách nhiệm xử lý toàn bộ luồng dữ liệu mạng (packet) vào và ra của máy chủ. Nói một cách dễ hiểu, nó giống như số lượng "nhân viên soát vé" ở cổng kết nối: nếu thiết đặt quá thấp, dữ liệu gửi nhận giữa người chơi và máy chủ sẽ bị nghẽn (bottleneck) dẫn đến tình trạng lag mạng - ping cao, block lag dù tps của server vẫn ở mức 20; ngược lại, nếu đẩy lên quá cao, bạn sẽ làm lãng phí tài nguyên CPU và gây ra độ trễ do hệ thống phải liên tục chuyển đổi ngữ cảnh (context switching) giữa quá nhiều luồng rác. Đối với hầu hết các phần mềm máy chủ, giá trị mặc định là 4 đã được Spigot và Paper tối ưu hóa cực tốt, thừa sức xử lý băng thông cho hàng trăm người chơi cùng lúc. Theo nhận định lâu đời của giới phát triển máy chủ Dev, bạn nên giữ nguyên con số 4 này.

Chỉ trong trường hợp máy chủ của bạn chạy trên máy vật lý có lượng nhân CPU cực khủng 16+ cores và phải gồng gánh một lượng kết nối đồng thời khổng lồ, bị nghẽn I/O rõ rệt qua các bản Spark báo cáo, thì mới nên cân nhắc nhích nhẹ lên 6 hoặc 8.