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.
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.
- Pobierz FAWE ze SpigotMC lub Modrinth - wybierz wersję pasującą do wersji serwera
- Usuń plik
WorldEdit-*.jarz folderuplugins/jeśli jest zainstalowany - Wrzuć pobrany plik
FastAsyncWorldEdit-*.jardo folderuplugins/ - 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:
- Przyjmuje operację do kolejki asynchronicznej
- Buforuje zmiany w pamięci w osobnym wątku roboczym
- Zapisuje chunki partiami na main threadzie w specjalnie wydzielonym okienku czasowym (domyślnie 50ms per tick)
- 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
expiryna 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
//seli krótki spacer przez obszar załaduje chunki do cache przed operacją - Ogranicz concurrent operations - jeśli 20 graczy naraz robi
//setna 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.