Bukkit Plugin – LogBlock

Zabezpieczenie serwera przed grieferami to podstawa, a LogBlock to jedna z bardzo ważnych wtyczek do rejestrowania użytkowników oraz cofania zmian, jakie dokonali. Jest to jednak dopiero wierzchołek góry związanej z zabezpieczaniem serwera. Do pełnej ochrony potrzeba jeszcze kilka innych elementów, które zostaną omówione w przyszłych wpisach.

LogBlock to przede wszystkim narzędzie do rejestrowania poczynań użytkowników na serwerze. Potrafi on wykryć, kto otwierał dane drzwi, postawił dany blok czy spowodował wybuch creepera oraz wiele więcej.

Prócz tego umożliwia wyświetlenie listy zniszczenia danego bloku wybranego gracza z dokładną datą. Oznacza to, że prostą komendą można również cofnąć wszystkie poczynania gracza na serwerze.

Żeby jednak to wszystko było dostępne, musimy podpiąć plugin do bazy MySQL i odpowiednio skonfigurować, ponieważ taki plugin wymaga troszkę od waszej maszyny. Wszystkie poniższe konfiguracje są ustawione optymalnie dla typowego serwera Minecraft.

Stabilne [1.0.1] – Dev [1.2.4]Twórca

1. Podpięcie LogBlock do bazy MySQL

Na początek wymagane jest posiadanie takiej bazy oraz podstawowa wiedza o niej. Nie wnikałem w oferty hostingów serwerów minecraft, ale upewnijcie się czy posiadają one bazę MySQL, ponieważ w innym wypadku będziecie musieli zrezygnować z LogBlock. Nie obsługuje on żadnej innej formy baz danych!

Otwierając plik konfiguracyjny config.yml, poszukajcie linijki „mysql„. Pod nią wpisujecie takie rzeczy jak nazwa użytkownika bazy MySQL, hasło tego użytkownika, port bazy, adres bazy oraz nazwę bazy danych.

mysql:
  port: 3306 (Port bazy MySQL zależny jest od hostingu)
  host: localhost (Zależnie od posiadanej bazy może to być adres lub lokalna baza [localhost] )
  password: HASŁO UŻYTKOWNIKA BAZY
  user: NAZWA UŻYTKOWNIKA BAZY
  database: NAZWA BAZY DANYCH (Dowolna, ważne by została wcześniej stworzona przez użytkownika, ponieważ LogBlock sam nie tworzy nowej bazy danych!)

Prócz tych podstawowych opcji, jakie znajdują się w domyślnym config.yml, ważne jest, by zadbać o poprawną konfigurację bazy MySQL dla LB.

default-storage-engine=MYISAM (Może być to MYISAM lub INNODB – Jeśli chcesz rejestrować treść czatu, to użyj typu MYISAM)
max_connections=100 (Jeśli konsola otrzymuje dużo informacji o treści „Too many connection errors” to zwiększą tą wartość)
key_buffer_size=128M (Bufor pamięci zachowuje w pamięci RAM cząstki danych bazy LogBlock, co przyspiesza jego działanie. Jednak jeśli twój serwer nie dysponuje dużą ilością pamięci ram warto zmniejszyć tą wartość)
innodb_buffer_pool_size=256M (W przypadku używania typu INNODB wymagana jest większa ilość ramu do zachowania informacji. Pobieranie danych z dysku twardego może trochę trwać)

2. Konfiguracja rejestrowania danych

W pliku konfiguracyjnym znajduje się dział odpowiedzialny za logowanie danych(logging). Można tam ustawić, jakie bloki mają być ignorowane podczas logowania, jacy gracze nie mają być brani pod uwagę oraz kilka innych przydatnych rzeczy.

logging:
  hiddenBlocks: (Domyślnie wypisane zero to odpowiednik powietrza, który nie ma potrzeby bycia logowanym przez serwer)
– 0
  hiddenPlayers: Notch, KodekPL (Lista graczy, którzy mają być ignorowani przez LogBlock)
  logCreeperExplosionsAsPlayerWhoTriggeredThese: false (Opcja ta ustawiona na true będzie wykrywać kto spowodował wybuch creepera, zapisując w logach tę osobę jako sprawcę)
  logKillsLevel: PLAYERS (Istnieją trzy poziomy logowania śmierci. PLAYERS loguje zabicie gracza przez innego gracza, MONSTERS loguje śmieć gracza przez potwory wraz ze śmiercią od innego gracza. Ostatni to ANIMALS, który loguje wszystkie przypadki śmierci w grze)
  logPlayerInfo: false (Logowanie informacji o graczach to zliczanie ile czasu przebywają na serwerze, kiedy ostatnio się zalogowali i kiedy ostatnio wyszli z serwera)

3. Częstotliwość zapisywania bazy danych

Zapisywanie bazy danych zajmuje serwerowi troszkę czasu i może powodować spadek jakości rozgrywki. Ważne, by dobrze go skonfigurować i nie mieć problemów z opóźnieniami w logowaniu serwera.

consumer:
  delayBetweenRuns: 6 (Ilość sekund, co jaką zapis się odbywa)
  forceToProcessAtLeast: 25 (Opcja ta wymusza zapis danych nawet podczas dużego zużycia procesora maszyny. Jeśli procesor jest na wysokim poziomie zużycia, LogBlock zdoła zapisać tylko 10 bloków na raz, w takim przypadku zwiększenie tej wartości może być rozwiązaniem)
  timePerRun: 100 (Ilość czasu, co jaką odbywa się zapis uzbieranych danych, wypada zwiększyć w przypadku dużej ilości logowanych danych np. duża ilość graczy lub dużo ingerencji w strukturę świata jak wybuchy TNT)
  useBukkitScheduler: true (Zegar bukkita nadaje się, kiedy chcemy logować informacje podczas działania serwera. Jeśli jednak twój serwer zapisuje logi po jego wyłączeniu, to wypada wyłączyć tę opcję)

4. Czyszczenie bazy danych

Z czasem baza danych zostanie zapełniona mnóstwem danych, które nie będą nam już potrzebne. Łatwo skonfigurować LogBlock by baza czyściła się po wpisanej ilości dni na dany świat.

clearlog:
  dumpDeletedLog: false (Opcja ta zrzuca bazę danych do katalogu plugins/LogBlock/Dump przed ich automatycznym usunięciem. Działa tylko w przypadku bazy lokalnej!)
  enableAutoClearLog: false (Definiuje czy chcemy automatycznie czyścić bazę, czy nie)
  auto: (Pod tą linijką wpisujemy polecenia dla czyszczenia bazy)
    – world „world” before 365 days all (Ta linijka wywołuje polecenie wyczyszczenia logów dla świata „world” przed upływem 365 dni dla „all” czyli wszystkich typów logów*)

 

    – world „world” player lavaflow waterflow leavesdecay before 7 days all (Ta linijka wywołuje polecenie wyczyszczenia logów dla świata „world” zapisanych przez graczy, spływającą lawę, spływającą wodę i niknięcie liści przed upływem 7 dni dla wszystkich typów logów*)

 

    – world world_nether ghast before 7 days all (Ta linijka wywołuje polecenie wyczyszczenia logów dla świata „world_nether” zapisanych przez ghasty przed upływem 7 dni dla wszystkich typów logów*)


* – Istnieje sześć typyów logów: Place, Break, Chest Access, Type, Created, Destroyed (Wszystkie zamykają się w poleceniu „all”)

  autoClearLogDelay: 6h (Kiedy nadejdzie dzień czyszczenia logów, ta opcja opóźni tą czynność o wpisaną ilość czasu)

5. Konfiguracja Rollbacka

Rollback to funkcja pozwalająca cofnąć wszystkie czynności, jakie wykonał gracz na serwerze. Dlatego właśnie jest to najlepsze narzędzie przeciwko grieferom, ponieważ jedną prostą komendą można cofnąć wszystkie szkody, jakich dokonał gracz. Wliczają się w to przestawione dźwignie, kradzieże ze skrzyń, zniszczone i postawione bloki czy rozlaną wodę lub lawę.

rollback:
replaceAnyway: (Są to bloki, które rozprzestrzeniają się same i będą cofnięte podczas rollbacka, jak np. ogień)
– 8
– 9
– 10
– 11
– 51
maxArea: 0 (Maksymalny obszar, jaki może zostać cofnięty, zero oznacza, że jest nieograniczony)
dontRollback: (Bloki, które nie zostaną cofnięte, czyli nie pojawią się ponownie jak np. lawa czy ogień)
– 10
– 11
– 46
– 51
maxTime: 30 days (Maksymalna ilość czasu, do jakiego można wykonać rollbacka)

6. Narzędzia do sprawdzania logów

By dojść do tego, kto jest sprawcą zniszczenia czyjegoś mienia, potrzebne jest nam narzędzie do sprawdzania logów. Istnieją jego dwa typy, które można zdefiniować domyślnie w pliku konfiguracyjnym pod linijką lookup.

lookup:
  toolID: 280 (Domyślne ID narzędzia do sprawdzania logów istniejącego bloku – Patyk)
  toolQuery: area 0 all sum none limit 15 desc silent (Polecenie wywołania logów z bazy danych)
  toolblockID: 7 (Domyślne ID narzędzia do sprawdzania logów w brakującym miejscu – Bedrock)
  toolBlockQuery: area 0 all sum none limit 15 desc silent (Polecenie wywołania logów z bazy danych)
  defaultDist: 20 (Domyślna wartość parametru obszarowego sprawdzania logów)
  defaultTime: 30 minutes (Domyślna wartość parametru czasu podczas sprawdzania logów)
  linesPerPage: 15 (Ilość wyświetlonych logów na stronę)
  linesLimit: 1500 (Limit wyświetlonych logów na raz)

Bez problemu można dodać również inne przedmioty, które będą mogli przyzywać gracze, jeśli nadamy im do tego permisję. Pod linijką „tools” w standardzie znajdują się wcześniej zdefiniowane domyślnie dwa narzędzia dla przykładu.

tools:
  toolblock: (Nazwa narzędzia)
    permissionDefault: ‚FALSE’ (Definiuje czy gracze mają posiadać domyślnie permisję do tego przedmiotu)
    item: 7 (ID tego przedmiotu)
    leftClickBehavior: TOOL (Czynność, jaką wykona przedmiot po kliknięciu lewym przyciskiem myszy)
    params: area 0 all sum none limit 15 desc silent (Polecenie wywołania logów z bazy danych)
    rightClickBehavior: BLOCK (Czynność, jaką wykona przedmiot po kliknięciu prawym przyciskiem myszy)
    aliases: (Aliasy do komendy przywołującej ten przedmiot jak np. /lb tb)
       – tb
    defaultEnabled: true (Czy przedmiot ma być domyślnie dostępny)
    mode: LOOKUP (Tryb działania przedmiotu, lookup to standardowy sposób LogBlock)
    canDrop: false (Czy gracz jest w stanie wyrzucić ten przedmiot)

7. Questioner – Jesteś pewien?

LogBlock Questioner to dodatkowy plugin, który pyta nas czy jesteśmy pewni podczas podjęcia decyzji zrobienia rollbacka, czy czyszczenia logów. Nie jest on potrzebny do używania LogBlock także, jeśli nie chcecie, nie musicie go instalować.

questioner:
  askRedos: false (Pyta czy jesteś pewien dokonania Redo)
  askClearLogs: false (Pyta czy jesteś pewien wyczyszczenia logów)
  askRollbacks: false (Pyta czy jesteś pewien dokonania Rollbacka)
  askClearLogAfterRollback: true (Pyta czy jesteś pewien wyczyszczenia logów po zrobieniu rollbacka)
  banPermission: permisja.pluginu.ktorym.banujesz (Definiuje, jaka permisja jest potrzebna do zbanowania gracza – Wpisujesz permisje pluginu, za pomocą którego banujesz graczy)
  askRollbackAfterBan: false (Pyta czy chcesz zbanować gracza po zrobieniu rollbacka)

8. Zdefiniowanie i konfiguracja rejestrowania świata

Ostatnią rzeczą, jaką musimy zdefiniować w pliku konfiguracyjnym LogBlock, jest lista logowanych światów. Wpisujemy tam od myślnika nazwy map, które chcemy by były zapisywanie do bazy.

loggedWorlds:
– world
– world_nether
– world_the_end

Następnie możemy uruchomić serwer, by pojawiły nam się odpowiednie pliki światów, w których ustalimy co ma być logowane lub dodamy je ręcznie. Znajdują się one w tym samym miejscu co config.yml.

logging:
TNTEXPLOSION: false (Loguje bloki zniszczone przez wybuch TNT)
LEAVESDECAY: false (Loguje zanikanie liści z drzewa)
MISCEXPLOSION: false (Loguje inne typy eksplozji)
SNOWFORM: false (Loguje powstawanie śniegu/lodu)
NATURALSTRUCTUREGROW: false (Loguje naturalnie powstające struktury jak np. drzewa)
KILL: false (Loguje śmierć graczy – Zależny od zdefiniowanego w pliku konfiguracyjnym)
FIRE: true (Loguje ogień)
CHAT: false (Loguje czat)
WATERFLOW: true (Loguje bloki zniszczone przez wodę)
BONEMEALSTRUCTUREGROW: false (Loguje struktury powstające z użyciem Bone Meal)
BLOCKPLACE: true (Loguje stawianie bloków przez graczy)
ENDERDRAGON: true (Loguje bloki zniszczone przez EnderDragona)
DIODEINTERACT: false (Loguje interakcje w Redstone Repeater)
SNOWFADE: false (Loguje zanikanie lodu/śniegu przez źródła światła)
CHESTACCESS: true (Loguje zmiany w skrzyni)
ENDERMEN: false (Loguje bloki zabrane i postawione przez Endermana)
SIGNTEXT: true (Loguje treść znaków)
LAVAFLOW: true (Loguje bloki zniszczone przez lawę)
CAKEEAT: false (Loguje graczy jedzących ciasto)
BLOCKBREAK: true (Loguje bloki zniszczone przez gracza)
SWITCHINTERACT: true (Loguje graczy wciskających przycisk, płytkę naciskową czy ruszających dźwignie)
NOTEBLOCKINTERACT: false (Loguje graczy używających Note Block)
GHASTFIREBALLEXPLOSION: true (Loguje bloki zniszczone przez Ghasta)
CREEPEREXPLOSION: true (Loguje bloki zniszczone przez Creepera)
DOORINTERACT: true (Loguje kto otwierał i zamykał drzwi)
table: lb-world (Nazwa tabeli w bazie danych, w której będą zapisywane wszystkie dane)

9. Komendy i permisje

Większość czynności związanych z LogBlock można wykonać podczas gry. Dodanie nowego świata do logowania wymaga jednak ingerencji w pliki i restartu serwera.

/lb help
Pomoc związana z LogBlock.

/lb params
Lista parametrów, jakie można użyć w komendach.

/lb commands
Lista komend, które łączymy z parametrami.

/lb permissions
Lista permisji LogBlock.

/lb tool – logblock.tools.tool
Otrzymujesz narzędzie typu „tool” – Domyślnie patyk.

/lb tool [on/off] – logblock.tools.tool
Wyłącza/włącza trzymany przedmiot do sprawdzania logów typu „tool”.

/lb toolblock – logblock.tools.toolblock
Otrzymujesz narzędzie typu „toolblock” – Domyślnie bedrock.

/lb toolblock [on/off] – logblock.tools.toolblock
Wyłącza/włącza trzymany przedmiot do sprawdzania logów typu „toolblock”.

/lb savequeue – logblock.*
Zapisuje wszystkie uzbierane dane przez LogBlock do bazy. Przydatne po wykonaniu sporego rollbacka.

/lb lookup [parametr] – logblock.lookup
Wyświetla wszystkie informacje, które wywołasz wpisanymi parametrami:

/lb lookup player Notch – Wyświetla wszystkie ingerencje w świat gracza Notch

/lb writelogfile [parametr] – logblock.rollback
Zapisuje wszystkie dane, które wywołasz komendą do pliku „/plugins/LogBlock/log”.

/lb tp [Liczba] – logblock.tp
Po wywołaniu listy zmian komendą /lb lookup możesz się teleportować do dowolnej z tych zmian, używając przypisanego do nich numerka. Jeśli chcesz przejrzeć inne strony listy zmiany, użyj komendy /lb page [liczba].

/lb rollback [parametr], /lb undo [parametr], /lb rb [parametr] – logblock.rollback
Cofa wszystkie czynności, jakie wykonał gracz na serwerze. Przykład:

/lb rollback player Notch since 1 d – Cofa wszystkie zmiany, jakie dokonał Notch na serwerze przez cały ostatni dzień.

/lb redo [parametr] – logblock.rollback
Przywraca wszystkie czynności, jakie wykonał gracz na serwerze. Komenda przydatna, jeśli dokonamy cofnięcia nie tego gracza, którego powinniśmy. Komendę tworzymy podobnie do rollbacka:

/lb redo player Notch since 1 d – Przywraca wszystkie zmiany, jakie dokonał Notch na serwerze przez cały ostatni dzień.

/lb clearlog [parametr] – logblock.clearlog
Usuwa logi ze wpisanych parametrów, pamiętaj, że tej czynności nie da się cofnąć! Najlepiej najpierw wywołać lookup, a potem usunąć logi używając/lb clearlog.

/lb hide – logblock.hide
Ukrywa cię dla logów, żadna z twoich czynności nie pojawi się w logach, bądź ostrożny!

logblock.ignoreRestrictions – Pozwala omijać limity wyznaczone w pliku konfiguracyjnym.

logblock.spawnTools – Pozwala przyzywać przedmioty do sprawdzania logów.

LogBlock to bardzo ważny plugin dla poprawnego prosperowania waszego serwera. Jednak samo cofanie czynności graczy nie wystarczy i trzeba im zapobiegać. Tym zajmiemy się w następnym wpisie na temat Bukkita.