
CoreProtect — Minecraft Java Edition 1.16 - 1.21.11+
Závislosti: · Loader: Bukkit, Spigot, Paper, Purpur, Folia · Verze Minecraftu: 1.16 - 1.21.11+ · Verze modu: 23.2 Víceuživatelské servery…
Závislosti: · Loader: Bukkit, Spigot, Paper, Purpur, Folia · Verze Minecraftu: 1.16 - 1.21.11+ · Verze modu: 23.2 Víceuživatelské servery Minecraftu vyžadují podrobný audit činností hráčů, aby se zabránilo neoprávněným
Závislosti:
· Loader: Bukkit, Spigot, Paper, Purpur, Folia
· Verze Minecraftu: 1.16 - 1.21.11+
· Verze modu: 23.2
Víceuživatelské servery Minecraftu vyžadují podrobný audit činností hráčů, aby se zabránilo neoprávněným změnám mapy a krádežím herních cenností. Vanilla jádro serveru nezaznamenává historii úprav krajiny ani přesouvání předmětů v kontejnerech, a proto administrátoři nemají možnost identifikovat narušitele nebo vrátit zničení zpět bez úplného obnovení souborů mapy ze záloh. Serverový plugin CoreProtect registruje všechny události měnící svět, vytváří podrobné indexy uživatelských akcí a provádí bodové zpětné vrácení (rollbacks) prostoru na základě složitých parametrických dotazů. Nástroj pracuje v asynchronním režimu a zapisuje transakce do fronty, aby chránil hlavní vlákno serveru před zpožděními.
1. Databáze a asynchronní architektura logování
Plugin CoreProtect zachytává události serveru pomocí obsluhy událostí Bukkit/Paper API. Aby se zabránilo blokování hlavního vlákna serveru (Server Thread) během zpracování tisíců záznamů za sekundu, používá plugin asynchronní model logování. Události (zničení bloku, změna inventáře truhly, použití příkazu) se nejprve umístí do interního dynamického bufferu DataQueue. Vlákno spotřebitele běžící na pozadí (Consumer Thread) čte transakce z bufferu a zapisuje je do databáze v dávkových transakcích (Batch processing), což snižuje zatížení úložiště.
Plugin podporuje práci se dvěma systémy řízení báze dat (DBMS):
1. SQLite (lokálně, výchozí): Všechny informace se zapisují do souboru database.db v adresáři pluginu. SQLite nevyžaduje instalaci služeb třetích stran, což jej činí vhodným pro malé lokální servery s nízkou úrovní transakcí.
2. MySQL / MariaDB (externí server): Využívá síťové připojení k samostatnému databázovému serveru. Toto řešení je průmyslovým standardem pro velké servery a serverové sítě s vysokým počtem hráčů online (od 50 hráčů). MySQL zajišťuje vysokou rychlost provádění indexových dotazů a vylučuje fragmentaci lokálního úložiště.
Schéma databázových tabulek
CoreProtect vytváří sadu relačních tabulek za účelem optimalizace ukládání dat. Místo ukládání úplných textových řetězců pro každý záznam plugin používá slovníkové tabulky pro jedinečná jména hráčů, světy, typy bloků a entity.
Tabulka | Účel | Hlavní pole |
|---|---|---|
| Slovník uživatelských jmen |
|
| Slovník herních světů |
|
| Registr změn bloků ve světě |
|
| Transakce předmětů v kontejnerech |
|
| Záznam přihlašovacích relací (přihlášení/odhlášení) |
|
| Obsah textových cedulí |
|
| Záznamy o smrti a spawnu tvorů |
|
Všechny souřadnice x, y, z se indexují společně s identifikátorem světa wid pro zajištění okamžitého vyhledávání transakcí v zadaném poloměru.
2. Syntaxe příkazů a parametry filtrování
Interakce s databází CoreProtect probíhá pomocí textových příkazů. Hlavní operace jsou: inspekce, vyhledávání, zpětné vrácení a zrušení zpětného vrácení.
Režim inspektora /co inspect nebo /co i)
Příkaz přepne klienta do režimu lokálního auditu. Po aktivaci může hráč interagovat se světem za účelem získání záznamů:
· Kliknutí levým tlačítkem na existující blok zobrazí v chatu přezdívku toho, kdo jej umístil, datum, čas a souřadnice.
· Kliknutí pravým tlačítkem na prázdnou plochu (nebo blok) zobrazí historii bloků, které dříve zaujímaly tento prostor nebo byly odstraněny.
· Kliknutí pravým tlačítkem na kontejner (truhla, pec, sud, shulker) zobrazí záznam o přesouvání předmětů.
Parametry filtrování dotazů /co rollback, /co restore, /co lookup)
Pro výběr dat plugin používá kombinované parametry ve formátu parametr:hodnota. Parametry se oddělují mezerami:
1. Uživatel u:<jméno>): Určuje hráče ke kontrole. Lze zadat několik jmen oddělených čárkou (například u:Stevie,Alex). Pro zpětné vrácení přírodních událostí se používají technické identifikátory:
· u:#fire – šíření ohně.
· u:#lava – rozlití lávy.
· u:#water – rozlití vody.
· u:#creeper – výbuch CREEPERA.
· u:#tnt – výbuch TNT.
· u:#enderman – přemísťování bloků ENDERMANEM.
2. Čas t:<hodnota>): Časový interval pro analýzu. Podporuje měrné jednotky: s (sekundy), m (minuty), h (hodiny), d (dny), w (týdny), y (roky). Je povoleno jednotky kombinovat, například: t:2w4d6h (2 týdny, 4 dny a 6 hodin).
3. Poloměr r:<číslo>): Poloměr zóny vyhledávání v blocích kolem vykonavatele příkazu. Podporuje rovněž speciální hodnoty:
· r:#global – vyhledávání v celé databázi (v rámci všech načtených chunků).
· r:#world – vyhledávání v rámci aktuálního herního světa.
· r:#chunk – vyhledávání v aktuálním chunku hráče.
· r:#selection (nebo r:#we) – omezuje vyhledávání na hranice aktuálního výběru WorldEdit.
4. Akce a:<typ>): Filtruje záznamy podle typu operace:
· a:block – umísťování a ničení bloků.
· a:+block – pouze umísťování bloků.
· a:-block – pouze ničení bloků.
· a:container – transakce inventáře.
· a:+container – přidávání předmětů do kontejneru.
· a:-container – vyjímání předmětů z kontejneru.
· a:kill – smrt zvířat a příšer.
· a:spawn – spawn entit.
· a:chat – zprávy v chatu.
· a:command – zadané příkazy.
· a:session – přihlašování hráčů.
5. Bloky b:<materiál>): Omezuje vyhledávání na zadané materiály (například b:stone,oak_planks).
6. Vyloučení e:<materiál>): Vylučuje materiály ze zpracování (například e:tnt).
Náhled zpětného vrácení a rušení operací
Pro minimalizaci chyb během rozsáhlých zpětných vrácení podporuje CoreProtect systém vizuálního modelování:
1. Vykonání příkazu zpětného vrácení s příznakem #preview (například /co rollback u:Griefer t:2h r:20 #preview) nemění soubory mapy. Místo toho klient obdrží pakety změn bloků v aktuální relaci vykreslování. Administrátor vidí svět ve stavu „po zpětném vrácení“, zatímco pro ostatní hráče zůstávají bloky beze změny.
#preview
/co apply
2. K použití výsledku se používá příkaz /co apply.
3. Ke zrušení náhledu se používá příkaz /co cancel.
4. Ke zrušení již provedeného fyzického zpětného vrácení se používá příkaz /co undo, který vrátí souřadnice do stavu před vykonáním /co rollback.
3. Úplný popis konfiguračního souboru config.yml
Konfigurační soubor řídí limity, parametry logování a připojení k databázím.
Blok obecných parametrů (General Settings)
· verbose: true – vypisuje do konzole podrobnou zprávu o každé upravené souřadnici během provádění zpětných vrácení. V případě nastavení na false se vypisuje pouze celkový počet změněných bloků.
· check-updates: true – při spuštění kontroluje, zda jsou na serverech vývojáře k dispozici nové verze pluginu.
· api-enabled: true – umožňuje pluginům třetích stran interagovat s daty CoreProtect.
· default-radius: 10 – výchozí poloměr zpětného vrácení, pokud tento parametr není v příkazu uveden.
· max-radius: 250 – omezuje maximální poloměr pro jeden příkaz. Hodnota 0 omezení ruší.
Blok parametrů logování (Logging Settings)
Tyto parametry určují, které konkrétní události se zapisují do databáze. Vypnutí nepotřebných záznamů pomáhá zmenšit velikost databáze:
· block-place: true / block-break: true – logování běžného umísťování a ničení bloků hráči.
· natural-break: true – logování pádu bloků v důsledku posunů nebo zničení opěrných bloků (například rozbití bloku, na kterém se držela pochodeň).
· block-movement: true – logování gravitačního pádu písku, štěrku nebo betonu.
· pistons: true – logování přemísťování bloků pomocí pístů.
· block-burn: true – logování zničení bloků ohněm.
· block-ignite: true – logování zapálení bloků hráči pomocí křesadla nebo ohnivých koulí.
· explosions: true – logování výbuchů TNT, CREEPERŮ, postelí v Netheru nebo krystalů Endu.
· entity-kills: true – registrace smrti vesničanů, zvířat, příšer a stojanů na zbroj.
· player-chat: true / player-command: true – logování zpráv v chatu a konzolových příkazů.
· player-session: true – logování času přihlášení a odhlášení hráčů ze serveru.
· container-transactions: true – logování operací přesouvání předmětů v truhlách, pecích, násypkách a shulkerech.
Blok databáze (Database Settings)
· use-mysql: false – přepínač typu databáze. V případě nastavení na true se plugin připojuje k externímu DBMS MySQL.
· table-prefix: co_ – předpona pro názvy SQL tabulek.
· mysql-host: localhost – IP adresa nebo doménové jméno databázového serveru MySQL.
· mysql-port: 3306 – síťový port pro připojení.
· mysql-database: minecraft – název cílové databáze.
· mysql-username: root – uživatelské jméno databáze.
· mysql-password: password – heslo uživatele.
· mysql-ssl: false – zapíná SSL šifrování připojení k databázovému serveru.
4. API pro vývojáře pluginů
CoreProtect poskytuje vývojářům přístup ke své databázi prostřednictvím třídy CoreProtectAPI. To umožňuje jiným pluginům (například WorldEdit nebo ochranným systémům) registrovat své změny nebo provádět automatické vyhledávání v historii.
Inicializace API
K připojení k API se používá inicializační metoda:
import net.coreprotect.CoreProtect; |
Hlavní metody rozhraní API
· boolean logPlacement(String user, Location location, Material type, BlockData blockData) – registruje umístění bloku v databázi jménem zadaného uživatele.
· boolean logRemoval(String user, Location location, Material type, BlockData blockData) – registruje zničení bloku.
· boolean logContainerTransaction(String user, Location location, Material type, ItemStack itemStack, boolean isAdded) – zaznamenává operaci přidání (true) nebo vyjmutí (false) předmětů z kontejneru.
· List<String[]> performLookup(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – provádí vyhledávání podle zadaných filtrů a vrací pole výsledků.
· List<String[]> performRollback(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – iniciuje asynchronní zpětné vrácení změn ve světě.
· List<String[]> performRestore(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – iniciuje asynchronní obnovení změn.
· boolean hasPlaced(String user, Block block, int time, int offset) – kontroluje, zda zadaný hráč umístil tento blok během určité doby.
· boolean hasRemoved(String user, Block block, int time, int offset) – kontroluje, zda zadaný hráč zničil tento blok.
5. Výkon, kompatibilita a údržba
Při práci s CoreProtect na serverech s vysokým počtem hráčů online berou administrátoři v úvahu specifika interakce s moderními serverovými architekturami:
· Podpora Folia: Serverové jádro Folia využívá regionální multithreading (Regionized multithreading), což od pluginů vyžaduje přísnou vláknovou bezpečnost při práci se světem. CoreProtect je přizpůsoben pro práci ve Folii: provádění operací /co rollback a /co restore probíhá prostřednictvím plánovače regionů (Region Scheduler), což zabraňuje konfliktům přístupu k chunkům a kritickým chybám ConcurrentModificationException.
· Clustering MultiPaper: Na serverech typu MultiPaper se CoreProtect konfiguruje tak, aby používal jedinou externí databázi MySQL. To pomáhá synchronizovat historii akcí hráčů na různých serverových uzlech clusteru.
· Čištění databáze (Purge): Lokální databáze SQLite se časem fragmentuje a rozrůstá, čímž zpomaluje provádění příkazů. Příkaz /co purge t:30d odstraní záznamy starší než 30 dní. Po vyčištění databáze se soubor SQLite database.db automaticky nezmenší, protože DBMS SQLite uchovává volné stránky pro budoucí záznamy. Pro fyzické zmenšení souboru na disku je nutné provést příkaz VACUUM přes databázovou konzoli nebo zastavit server a provést kompresi pomocí nástrojů třetích stran. Použití MySQL tento problém odstraňuje, protože DBMS MySQL efektivněji uvolňuje nevyužité místo na disku.
Závěr
CoreProtect je standardem pro systémy logování a obnovy na serverech Minecraft Java Edition. Na rozdíl od alternativ jako LogBlock (který podporuje pouze práci s MySQL a omezuje se na logování bloků) nebo Prism (který má složitější strukturu nastavení) nabízí CoreProtect plně samostatné spuštění se SQLite, podrobné sledování obsahu kontejnerů a také jedinečný systém náhledu zpětných vrácení #preview. Jediným technickým omezením pluginu je značné zatížení diskového úložiště během čištění velkých lokálních databází SQLite, a proto se velkým projektům doporučuje používat vyhrazené DBMS MySQL na rychlých discích NVMe. Plugin je vhodný jak pro malé soukromé servery přátel, tak pro rozsáhlé projekty se stovkami aktivních hráčů.
Instalace
Typická instalace trvá asi 5 minut. Postup je stejný; liší se jen loader a odpovídající verze.
- 1Stop your Minecraft server.
- 2Drop the plugin .jar into the server /plugins folder.
- 3Start the server once so the plugin generates its config files.
- 4Edit /plugins/<name>/config.yml as needed, then run /reload confirm or restart.








