Discord
Wiki - Pluginy

FastAsyncWorldEdit (FAWE) - asynchroniczny edytor świata

FastAsyncWorldEdit to najszybszy sposób na masową edycję bloków na serwerze Minecraft. Wykonuje operacje asynchronicznie - serwer nie laguje, TPS nie spada, a gracz dostaje wynik w ułamku sekundy. Obowiązkowy plugin dla każdego serwera kreatywnego i budowlanego.

Czas czytania: ~7 min Platforma: Paper / Purpur / Pufferfish

Co to jest FastAsyncWorldEdit

FastAsyncWorldEdit (w skrócie FAWE) to plugin serwerowy rozwijany przez IntellectualSites, który jest pełnym zamiennikiem oryginalnego WorldEdit. Zawiera całą funkcjonalność WorldEdit, ale przepisuje silnik edycji tak, żeby działał asynchronicznie - czyli poza głównym wątkiem serwera.

W praktyce oznacza to, że możesz zaznaczyć obszar miliona bloków i wypełnić go diamentami, a serwer nadal będzie działał płynnie na 20 TPS. Gracze nie zauważą żadnego laga. FAWE kolejkuje operacje i wykonuje je w tle, raportując postęp i wynik po zakończeniu.

Plugin jest szczególnie popularny na serwerach kreatywnych i budowlanych, gdzie gracze regularnie wykonują duże zaznaczenia i operacje na dziesiątkach tysięcy bloków naraz. Bez FAWE tego typu serwer często lagowałby do nieużywalności. Z FAWE kilku graczy może jednocześnie robić masowe edycje bez wzajemnego przeszkadzania sobie ani spowalniania serwera.

FAWE jest dostępny za darmo na SpigotMC oraz Modrinth. Kod źródłowy jest otwarty na GitHub.

FAWE vs WorldEdit - różnice

Oryginalny WorldEdit działa synchronicznie - każda operacja blokuje główny wątek serwera do czasu jej zakończenia. Dla małych zaznączeń (kilkaset bloków) nie ma to znaczenia. Dla zaznączeń liczących setki tysięcy bloków różnica jest kolosalna.

Cecha WorldEdit (oryginalny) FastAsyncWorldEdit
Model wykonania Synchroniczny (blokuje główny wątek) Asynchroniczny (działa w tle)
Wpływ na TPS Duże operacje powodują lagi Brak wpływu na TPS serwera
Szybkość dużych operacji Wolna, proporcjonalna do liczby bloków Do 100x szybsza dzięki buforowaniu
Limity per gracz Brak wbudowanych limitów Konfigurowane limity bloków, pamięci, czasu
Dodatkowe brushe Podstawowy zestaw Rozszerzony zestaw (scatter, layer, height map)
Obsługa schematów Standardowa Szybsza, z kompresją i strumieniowaniem
Integracja z PlotSquared Ograniczona Natywna, głęboka integracja
Wymagania Spigot, Paper, Fabric, Forge Paper lub fork (1.17+)

Jedyne ograniczenie FAWE względem oryginalnego WorldEdit to brak obsługi Fabric i Forge - FAWE działa wyłącznie jako plugin serwerowy na Paper i jego forkach. Jeśli prowadzisz serwer Spigot (bez Paper), musisz zaktualizować platformę przed instalacją FAWE 2.x.

Instalacja FAWE

Instalacja jest prosta, ale wymaga jednego ważnego kroku - usunięcia oryginalnego WorldEdit, jeśli go masz. FAWE i WorldEdit nie mogą działać jednocześnie, bo obydwa rejestrują te same komendy i nastąpi konflikt.

  1. Pobierz FAWE ze SpigotMC lub Modrinth - wybierz wersję pasującą do wersji serwera
  2. Usuń plik WorldEdit-*.jar z folderu plugins/ jeśli jest zainstalowany
  3. Wrzuć pobrany plik FastAsyncWorldEdit-*.jar do folderu plugins/
  4. Uruchom serwer - FAWE automatycznie wygeneruje konfigurację w plugins/FastAsyncWorldEdit/

Po pierwszym uruchomieniu sprawdź w konsoli, czy FAWE się załadował poprawnie. Powinieneś zobaczyć wpis w stylu [FAWE] Enabled FastAsyncWorldEdit. Wpisz //version w grze, żeby potwierdzić działanie.

FAWE wymaga Javy 17 lub nowszej. Na Paper 1.20+ Java 21 jest rekomendowaną wersją - FAWE działa na niej bez żadnych problemów i jest wówczas najszybszy.

Asynchroniczne operacje - jak to działa

Kluczową innowacją FAWE jest przeniesienie ciężkiej pracy edycji bloków poza główny wątek serwera (main thread). W oryginalnym WorldEdit każda operacja - niezależnie od rozmiaru - wykonuje się na main threadzie, co skutkuje tym, że serwer jest zablokowany podczas tej pracy i nie może obsługiwać innych graczy, tickować mobów ani przetwarzać fizyki.

FAWE zamiast tego tworzy kolejkę zadań. Kiedy gracz wykonuje //set stone na zaznaczeniu 500 000 bloków, FAWE:

  1. Przyjmuje operację do kolejki asynchronicznej
  2. Buforuje zmiany w pamięci w osobnym wątku roboczym
  3. Zapisuje chunki partiami na main threadzie w specjalnie wydzielonym okienku czasowym (domyślnie 50ms per tick)
  4. Informuje gracza o postępie i zakończeniu operacji

Dzięki temu 20 TPS serwera jest zachowane przez cały czas operacji. W praktyce oznacza to, że serwer z FAWE może obsłużyć 10 graczy robiących jednocześnie //set na milionowych zaznaączeniach bez żadnego wpływu na pozostałych graczy.

Operacje asynchroniczne mają też wbudowane zabezpieczenia: jeśli gracz wyjdzie z serwera w trakcie operacji, FAWE ją bezpiecznie przerywa lub kontynuuje do końca (zależnie od konfiguracji). Historia edycji (undo/redo) jest też zapisywana asynchronicznie.

Limity i uprawnienia

Jedną z największych zalet FAWE nad oryginalnym WorldEdit są wbudowane limity per gracz. Bez limitów jeden gracz może zaznaczyć całe mapę i wywołać //set bedrock, co nawet z FAWE zużyłoby ogromne zasoby RAM. Limity chronią przed tym zarówno celowo, jak i przez przypadek.

Uprawnienia limitujące

Uprawnienie Opis
fawe.limit.<liczba> Maksymalna liczba bloków per operacja (np. fawe.limit.100000)
fawe.bypass-limit Omija limity - dla adminów i budowniczych zaufanych
fawe.async Zezwala na asynchroniczne wykonanie operacji
worldedit.history.undo.other Pozwala cofać edycje innych graczy
worldedit.selection.expand.vertical Pozwala rozszerzać zaznaczenie do granicy budowania

Globalne limity w konfiguracji

Plik plugins/FastAsyncWorldEdit/config.yml zawiera sekcję limits:

limits:
  # Maksymalna liczba bloków per operacja (0 = brak limitu)
  max-actions: 5000000
  # Maksymalny czas trwania operacji (ms, 0 = brak limitu)
  max-time: 0
  # Maksymalna pamięć na historię edycji per gracz (MB)
  max-memory: 256
  # Maksymalna głębokość cofania (liczba operacji)
  max-iterations: 20
  # Limit bloków dla /brush
  max-brush-size: 100

Rekomendacja: dla serwera kreatywnego z zaufanymi graczami możesz podnieść max-actions do 10-20 milionów. Dla serwera publicznego, gdzie gracze nie są weryfikowani, warto ograniczyć do 500 000 - 1 000 000 i używać systemu rang przez LuckPerms, żeby zaufani budowniczowie mogli więcej.

Brushe w FAWE

Brushe (pędzle) to narzędzia FAWE, które pozwalają malować zmianami bloków jak pędzlem - klikasz w świat i plugin modyfikuje obszar wokół kursora. FAWE rozszerza zestaw brushy dostępnych w oryginalnym WorldEdit o kilka przydatnych typów.

Żeby przypisać brush do trzymanego przedmiotu:

//brush sphere stone 5        # kula kamienia o promieniu 5
//brush cylinder dirt 3 2     # cylinder ziemi, promień 3, wysokość 2
//brush smooth 4              # wygładzanie terenu, promień 4
//brush gravity 10            # symuluje grawitację (bloki "opadają")
//brush scatter stone 5 10    # losowe rozrzucenie bloków, gęstość 10%

Brushe FAWE działają asynchronicznie tak samo jak inne operacje - możesz szybko klikać bez powodowania lagów. Ustawiasz maskę (które bloki zastępować) i materiał (czym zastępować) tak samo jak w //set:

//mask grass_block,dirt       # brush działa tylko na trawie i ziemi
//material stone,cobblestone  # losowo używa kamienia i bulwy

//brush layer 5 grass_block,dirt,stone   # nakłada warstwy od góry
//brush height 5 10                       # podnosi/obniża teren jak height map

Brush height jest szczególnie przydatny przy terraformingu - pozwala naturalnie kształtować wzgórza i doliny. Połączony z //mask (żeby nie ruszać skały bazowej) daje bardzo organiczne rezultaty.

Możesz mieć wiele brushy naraz, każdy przypisany do innego przedmiotu w ekwipunku. Brush dezaktywujesz przez //none na tym przedmiocie.

Historia edycji - undo i redo

FAWE przechowuje historię edycji per gracz. Każda operacja - niezależnie od rozmiaru - jest zapisywana w buforze, który pozwala ją cofnąć (//undo) lub ponowić (//redo). Domyślnie historia przechowuje ostatnie 15 operacji, co jest konfigurowalne.

//undo          # cofnij ostatnią operację
//undo 3        # cofnij ostatnie 3 operacje
//redo          # ponów cofniętą operację
//undo <gracz>  # cofnij edycję innego gracza (wymaga uprawnienia)

Historia edycji jest zapisywana w katalogu plugins/FastAsyncWorldEdit/history/. FAWE kompresuje historię, żeby zużywała mniej miejsca na dysku. Duże operacje (miliony bloków) mogą zajmować kilkadziesiąt MB per operacja - warto monitorować rozmiar tego folderu na dużych serwerach kreatywnych.

Ważna różnica względem oryginalnego WorldEdit: historia FAWE jest persistentna między sesjami. Jeśli gracz się rozłączy, a potem wróci, nadal może cofnąć swoje poprzednie operacje (przez skonfigurowany czas lub limit operacji). To bardzo przydatne na serwerach kreatywnych, gdzie gracz może wrócić następnego dnia i cofnąć błąd z poprzedniej sesji.

Admini z uprawnieniem worldedit.history.undo.other mogą cofać edycje innych graczy - przydatne gdy ktoś zniszczy teren, który powinien pozostać niezmieniony.

Schematy - zapis i wczytywanie budowli

Schematy (pliki .schematic lub .schem) to zapis budowli z WorldEdit/FAWE - pozwalają kopiować budowle między serwerami, tworzyć bibliotekę szablonów i wklejać gotowe struktury. FAWE obsługuje zarówno stary format .schematic (WorldEdit Classic), jak i nowy .schem (Sponge Schematic).

//schem save moj_zamek    # zapisuje clipboard do pliku moj_zamek.schem
//schem load moj_zamek   # ładuje schemat do clipboardu
//paste                  # wkleja clipboard w bieżące miejsce
//paste -a               # wkleja bez bloków powietrza (powietrze = transparent)
//paste -o               # wkleja w oryginalnej pozycji zapisu

Schematy są zapisywane w plugins/FastAsyncWorldEdit/schematics/. Możesz wrzucić pliki .schem ręcznie przez FTP i od razu ich używać. To popularny sposób na tworzenie "sklepu ze spawn buildami" - admin przygotowuje kilkadziesiąt schematów, gracze mogą je wklejać na swojej parceli.

FAWE ładuje schematy asynchronicznie - nawet bardzo duże pliki (dziesiątki MB) ładują się bez laga serwera. Oryginalny WorldEdit ładuje duże schematy synchronicznie, co może powodować kilkusekundowe zawisy serwera.

Praktyczne zastosowanie z PlotSquared: możesz ustawić schemat jako domyślny stan parceli i po jej wyzerowaniu (/plot clear) FAWE automatycznie wkleja schemat startowy. Daje to graczom czystą, ładną podstawę zamiast pustej, płaskiej parceli.

Konfiguracja FAWE

Główny plik konfiguracyjny to plugins/FastAsyncWorldEdit/config.yml. Oto najważniejsze opcje:

# Asynchroniczność
queue:
  # Ile bloków FAWE może zapisać per tick (wyżej = szybciej, ale więcej obciążenia)
  target-size: 65536
  # Czas między flushami kolejki (ms)
  max-wait-ms: 1000

# Limity globalne
limits:
  max-actions: 5000000        # bloków per operacja
  max-time: 0                  # ms (0 = brak limitu)
  max-memory: 256              # MB historii per gracz
  max-iterations: 20           # głębokość undo

# Cachowanie chunków (przyspiesza wielokrotne operacje w tym samym obszarze)
history:
  use-database: false          # historia w plikach (true = SQLite)
  size: 15                     # liczba operacji w historii per gracz
  expiry: 10                   # czas przechowywania historii (minuty)

# Bezpieczeństwo
enabled-components:
  commands: true
  brushes: true
  expressions: true            # wyrażenia matematyczne (np. //generate)
  anvil-commands: false        # zaawansowane komendy Anvil (eksperymentalne)

Jeśli serwer ma dużo graczy używających FAWE jednocześnie, zwiększ target-size ostrożnie - zbyt duża wartość może powodować tymczasowe skoki obciążenia przy fluszowaniu kolejki. Zacznij od domyślnej wartości i testuj.

Porady wydajnościowe

FAWE jest szybki z założenia, ale kilka ustawień i praktyk może jeszcze bardziej poprawić doświadczenie na dużych serwerach:

  • Ustaw rozsądne limity bloków - nawet z FAWE operacja na 50 milionach bloków zużyje dużo RAM. Dla graczy bez rangi ustaw limit 500 000 - 1 000 000, dla budowniczych VIP 5 000 000. Admini mogą mieć fawe.bypass-limit
  • Monitoruj folder history - jeśli gracze robią dużo dużych operacji, folder historii może szybko urosnąć do kilku GB. Ustaw expiry na 10-30 minut, żeby automatycznie usuwać starą historię
  • Paper 1.20.4+ z Java 21 - FAWE korzysta z wirtualnych wątków dostępnych w Javie 21. Na Paper 1.20.4+ z Javą 21 osiągasz maksymalną wydajność. Upewnij się, że JVM jest uruchomiony z flagami Aikar (optymalne GC)
  • Nie używaj //set na ogromnych obszarach bez maski - zamiast zaznaczyć 10 000x10 000 bloków i ustawić wszystko na kamień, użyj maski //mask air żeby zastąpić tylko powietrze. Redukuje liczbę faktycznie zmienianych bloków nawet 10-krotnie
  • Preload chunków przed dużymi operacjami - FAWE musi załadować chunki przed edycją. Komenda //sel i krótki spacer przez obszar załaduje chunki do cache przed operacją
  • Ogranicz concurrent operations - jeśli 20 graczy naraz robi //set na milionowych zaznaączeniach, nawet FAWE będzie walczyć z pamięcią. Rozważ plugin limitujący liczbę jednoczesnych operacji WE lub wdróż system kolejkowania przez grupy LuckPerms

Integracja z PlotSquared

FAWE ma natywną integrację z PlotSquared. Kiedy oba pluginy są zainstalowane, FAWE automatycznie ogranicza edycje WorldEdit do granic parceli - gracz nie może przez przypadek (ani celowo) edytować sąsiedniej parceli ani dróg. To eliminuje konieczność pilnowania uprawnień WorldEdit na serwerach parcelowych.

Żeby aktywować integrację, upewnij się, że masz zainstalowaną wersję PlotSquared kompatybilną z Twoją wersją FAWE. Sprawdź stronę dokumentacji FAWE dla aktualnej macierzy kompatybilności.

Porównanie wydajności - przykładowe czasy

Operacja WorldEdit (synchroniczny) FastAsyncWorldEdit
//set stone na 100 000 bloków ~2-3 sekundy laga ~0.5s w tle, 0ms laga
//set stone na 1 000 000 bloków ~20-30 sekund laga, często crash ~3-5s w tle, 0ms laga
Wczytanie schematu 50MB ~5-10s laga serwera ~2-4s w tle, 0ms laga
//replace na 500 000 bloków Zazwyczaj timeout lub crash ~2s w tle, bez laga

Liczby są orientacyjne i zależą od sprzętu serwera, wersji Javy i konfiguracji. Na nowoczesnym sprzęcie z Javą 21 FAWE może być nawet 100x szybszy od oryginalnego WorldEdit dla dużych operacji.

Powiązane pluginy: WorldGuard (ochrona regionów, działa razem z FAWE), PlotSquared (system parcel z natywną integracją FAWE), katalog pluginów.