
CoreProtect — Minecraft Java Edition 1.16 - 1.21.11+
Afhængigheder: · Loader: Bukkit, Spigot, Paper, Purpur, Folia · Minecraft-version: 1.16 - 1.21.11+ · Mod-version: 23.2 Minecraft-servere…
Afhængigheder: · Loader: Bukkit, Spigot, Paper, Purpur, Folia · Minecraft-version: 1.16 - 1.21.11+ · Mod-version: 23.2 Minecraft-servere med flere spillere kræver en detaljeret revision af spillernes handlinger for at f
Afhængigheder:
· Loader: Bukkit, Spigot, Paper, Purpur, Folia
· Minecraft-version: 1.16 - 1.21.11+
· Mod-version: 23.2
Minecraft-servere med flere spillere kræver en detaljeret revision af spillernes handlinger for at forhindre uautoriserede ændringer af kortet og tyveri af spilværdier. Serverens vanilla-kerne registrerer ikke historikken over landskabsredigeringer eller flytning af genstande i beholdere, så administratorer har ingen mulighed for at identificere overtrædere eller fortryde ødelæggelser uden en fuld gendannelse af kortfilerne fra sikkerhedskopier. Server-plugin'et CoreProtect registrerer alle hændelser, der ændrer verden, opretter detaljerede indekser over brugerhandlinger og udfører punktvise tilbagerulninger (rollbacks) af området baseret på komplekse parametriske forespørgsler. Værktøjet fungerer i asynkron tilstand og skriver transaktioner til en kø for at beskytte serverens hovedtråd mod forsinkelser.
1. Databaser og asynkron logningsarkitektur
CoreProtect-plugin'et opfanger serverhændelser ved hjælp af Bukkit/Paper API'ets hændelseshåndteringer. For at forhindre blokering af serverens hovedtråd (Server Thread) under behandling af tusindvis af poster i sekundet bruger plugin'et en asynkron logningsmodel. Hændelser (ødelæggelse af en blok, ændring af en kistes inventar, brug af en kommando) placeres først i en intern dynamisk buffer DataQueue. En baggrundstråd-forbruger (Consumer Thread) læser transaktioner fra bufferen og skriver dem til databasen i batch-transaktioner (Batch processing), hvilket reducerer belastningen på lagermediet.
Plugin'et understøtter arbejde med to databasestyringssystemer (DBMS):
1. SQLite (Lokalt som standard): Al information skrives til filen database.db i plugin'ets mappe. SQLite kræver ikke installation af tredjepartstjenester, hvilket gør det praktisk til mindre lokale servere med et lavt transaktionsniveau.
2. MySQL / MariaDB (Ekstern server): Bruger en netværksforbindelse til en separat databaseserver. Denne løsning er industristandard for store servere og servernetværk med et højt antal samtidige spillere (fra 50 spillere). MySQL sikrer høj udførelseshastighed for indeksforespørgsler og udelukker fragmentering af det lokale lager.
Databasens tabelskema
CoreProtect opretter et sæt relationelle tabeller for at optimere datalagringen. I stedet for at gemme fulde tekststrenge for hver post bruger plugin'et opslagstabeller til unikke spillernavne, verdener, bloktyper og entiteter.
Tabel | Formål | Hovedfelter |
|---|---|---|
| Opslagstabel for brugernavne |
|
| Opslagstabel for spilverdener |
|
| Register over blokændringer i verden |
|
| Transaktioner med genstande i beholdere |
|
| Log over loginsessioner (ind/ud) |
|
| Indhold af tekstskilte |
|
| Poster over væseners død og spawn |
|
Alle koordinaterne x, y, z indekseres sammen med verdens-id'et wid for at sikre øjeblikkelig søgning af transaktioner inden for en given radius.
2. Kommandosyntaks og filtreringsparametre
Interaktionen med CoreProtects database sker ved hjælp af tekstkommandoer. Hovedoperationerne er: inspektion, søgning, tilbagerulning og fortrydelse af tilbagerulning.
Inspektørtilstand /co inspect eller /co i)
Kommandoen skifter klienten til lokal revisionstilstand. Efter aktivering kan spilleren interagere med verden for at hente logfiler:
· Venstreklik på en eksisterende blok viser i chatten brugernavnet på den, der placerede den, samt dato, tid og koordinater.
· Højreklik på en tom flade (eller blok) viser historikken over blokke, der tidligere optog dette område, eller som blev fjernet.
· Højreklik på en beholder (kiste, ovn, tønde, shulker) viser loggen over flytning af genstande.
Filtreringsparametre for forespørgsler /co rollback, /co restore, /co lookup)
Til datavalg bruger plugin'et kombinerede parametre i formatet parameter:værdi. Parametre adskilles med mellemrum:
1. Bruger u:<navn>): Angiver spilleren, der skal kontrolleres. Du kan angive flere navne adskilt med komma (for eksempel u:Stevie,Alex). Til tilbagerulning af naturlige hændelser bruges tekniske identifikatorer:
· u:#fire – ildspredning.
· u:#lava – lavaudslip.
· u:#water – vandudslip.
· u:#creeper – eksplosion fra en CREEPER.
· u:#tnt – eksplosion fra TNT.
· u:#enderman – flytning af blokke af en ENDERMAN.
2. Tid t:<værdi>): Tidsinterval til analyse. Understøtter måleenheder: s (sekunder), m (minutter), h (timer), d (dage), w (uger), y (år). Det er tilladt at kombinere enheder, for eksempel: t:2w4d6h (2 uger, 4 dage og 6 timer).
3. Radius r:<tal>): Søgezonens radius i blokke omkring kommandoens udfører. Understøtter også specialværdier:
· r:#global – søgning i hele databasen (inden for alle indlæste chunks).
· r:#world – søgning inden for den aktuelle spilverden.
· r:#chunk – søgning i spillerens aktuelle chunk.
· r:#selection (eller r:#we) – begrænser søgningen til grænserne for den aktuelle WorldEdit-markering.
4. Handling a:<type>): Filtrerer poster efter operationstype:
· a:block – placering og ødelæggelse af blokke.
· a:+block – kun placering af blokke.
· a:-block – kun ødelæggelse af blokke.
· a:container – inventartransaktioner.
· a:+container – tilføjelse af genstande til en beholder.
· a:-container – fjernelse af genstande fra en beholder.
· a:kill – død af dyr og monstre.
· a:spawn – spawn af entiteter.
· a:chat – chatbeskeder.
· a:command – indtastede kommandoer.
· a:session – spillerlogin.
5. Blokke b:<materiale>): Begrænser søgningen til de angivne materialer (for eksempel b:stone,oak_planks).
6. Udelukkelse e:<materiale>): Udelukker materialer fra behandlingen (for eksempel e:tnt).
Forhåndsvisning af tilbagerulning og fortrydelse af operationer
For at minimere fejl under storstilede tilbagerulninger understøtter CoreProtect et visuelt simuleringssystem:
1. Udførelse af tilbagerulningskommandoen med flaget #preview (for eksempel /co rollback u:Griefer t:2h r:20 #preview) ændrer ikke kortfilerne. I stedet modtager klienten blokændringspakker i den aktuelle renderingssession. Administratoren ser verden i tilstanden "efter tilbagerulning", mens blokkene forbliver uændrede for andre spillere.
#preview
/co apply
2. For at anvende resultatet bruges kommandoen /co apply.
3. For at annullere forhåndsvisningen bruges kommandoen /co cancel.
4. For at fortryde en allerede udført fysisk tilbagerulning anvendes kommandoen /co undo, som bringer koordinaterne tilbage til tilstanden før udførelsen af /co rollback.
3. Fuldstændig beskrivelse af konfigurationsfilen config.yml
Konfigurationsfilen styrer grænser, logningsparametre og databaseforbindelser.
Blok med generelle parametre (General Settings)
· verbose: true – udskriver en detaljeret rapport til konsollen om hver ændret koordinat under udførelse af tilbagerulninger. Hvis sat til false udskrives kun det samlede antal ændrede blokke.
· check-updates: true – kontrollerer, om der er nye versioner af plugin'et på udviklerens servere ved opstart.
· api-enabled: true – tillader tredjeparts-plugins at interagere med CoreProtects data.
· default-radius: 10 – standardradius for tilbagerulning, hvis denne parameter ikke er angivet i kommandoen.
· max-radius: 250 – begrænser den maksimale radius for en enkelt kommando. Værdien 0 fjerner begrænsningen.
Blok med logningsparametre (Logging Settings)
Disse parametre bestemmer, hvilke hændelser der præcist skrives til databasen. Deaktivering af unødvendige logfiler hjælper med at reducere databasens størrelse:
· block-place: true / block-break: true – logning af spillernes almindelige placering og ødelæggelse af blokke.
· natural-break: true – logning af blokke, der falder ned som følge af forskydninger eller ødelæggelse af støtteblokke (for eksempel når man bryder den blok, en fakkel hang på).
· block-movement: true – logning af gravitationsfald af sand, grus eller beton.
· pistons: true – logning af flytning af blokke ved hjælp af stempler.
· block-burn: true – logning af ødelæggelse af blokke ved brand.
· block-ignite: true – logning af spilleres antændelse af blokke ved hjælp af et fyrtøj eller ildkugler.
· explosions: true – logning af eksplosioner fra TNT, CREEPERE, senge i Nether eller End-krystaller.
· entity-kills: true – registrering af død af landsbyboere, dyr, monstre og rustningsstativer.
· player-chat: true / player-command: true – logning af chatbeskeder og konsolkommandoer.
· player-session: true – logning af spillernes ind- og udlogningstidspunkter på serveren.
· container-transactions: true – logning af operationer med flytning af genstande i kister, ovne, tragte og shulkere.
Databaseblok (Database Settings)
· use-mysql: false – kontakt for databasetype. Hvis sat til true opretter plugin'et forbindelse til et eksternt MySQL DBMS.
· table-prefix: co_ – præfiks for navnene på SQL-tabeller.
· mysql-host: localhost – IP-adresse eller domænenavn for MySQL-databaseserveren.
· mysql-port: 3306 – netværksport til forbindelsen.
· mysql-database: minecraft – navnet på måldatabasen.
· mysql-username: root – databasebrugernavn.
· mysql-password: password – brugerens adgangskode.
· mysql-ssl: false – aktiverer SSL-kryptering af forbindelsen til databaseserveren.
4. API til plugin-udviklere
CoreProtect giver udviklere adgang til sin database via klassen CoreProtectAPI. Dette gør det muligt for andre plugins (for eksempel WorldEdit eller beskyttelsessystemer) at registrere deres ændringer eller udføre automatisk historiksøgning.
Initialisering af API'et
Til forbindelse med API'et bruges initialiseringsmetoden:
import net.coreprotect.CoreProtect; |
API-grænsefladens hovedmetoder
· boolean logPlacement(String user, Location location, Material type, BlockData blockData) – registrerer placeringen af en blok i databasen på vegne af den angivne bruger.
· boolean logRemoval(String user, Location location, Material type, BlockData blockData) – registrerer ødelæggelsen af en blok.
· boolean logContainerTransaction(String user, Location location, Material type, ItemStack itemStack, boolean isAdded) – registrerer operationen med tilføjelse (true) eller fjernelse (false) af genstande fra en beholder.
· List<String[]> performLookup(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – udfører en søgning efter de angivne filtre og returnerer et array af resultater.
· List<String[]> performRollback(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – starter en asynkron tilbagerulning af ændringer i verden.
· List<String[]> performRestore(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – starter en asynkron gendannelse af ændringer.
· boolean hasPlaced(String user, Block block, int time, int offset) – kontrollerer, om den angivne spiller har placeret denne blok inden for et bestemt tidsrum.
· boolean hasRemoved(String user, Block block, int time, int offset) – kontrollerer, om den angivne spiller har ødelagt denne blok.
5. Ydeevne, kompatibilitet og vedligeholdelse
Når man arbejder med CoreProtect på servere med mange samtidige spillere, tager administratorer højde for de særlige forhold ved interaktion med moderne serverarkitekturer:
· Folia-understøttelse: Folia-serverkernen bruger regionaliseret multithreading (Regionized multithreading), hvilket kræver streng trådsikkerhed af plugins under arbejdet med verden. CoreProtect er tilpasset til at fungere i Folia: udførelsen af operationerne /co rollback og /co restore sker via regionplanlæggeren (Region Scheduler), hvilket forhindrer konflikter i adgangen til chunks og kritiske fejl som ConcurrentModificationException.
· MultiPaper-clustering: På servere af typen MultiPaper konfigureres CoreProtect til at bruge en enkelt ekstern MySQL-database. Dette hjælper med at synkronisere historikken over spillernes handlinger på klyngens forskellige servernoder.
· Oprydning af databasen (Purge): Den lokale SQLite-database fragmenteres og vokser med tiden, hvilket sænker udførelsen af kommandoer. Kommandoen /co purge t:30d sletter poster, der er ældre end 30 dage. Efter oprydning af databasen reduceres SQLite-filen database.db ikke automatisk i størrelse, da SQLite DBMS gemmer frie sider til fremtidige poster. For fysisk at reducere filen på disken er det nødvendigt at udføre kommandoen VACUUM via databasekonsollen eller at stoppe serveren og udføre komprimering ved hjælp af tredjepartsværktøjer. Brug af MySQL eliminerer dette problem, da MySQL DBMS frigør ubrugt diskplads mere effektivt.
Konklusion
CoreProtect er standarden for lognings- og gendannelsessystemer på Minecraft Java Edition-servere. I modsætning til alternativer som LogBlock (som kun understøtter arbejde med MySQL og er begrænset til logning af blokke) eller Prism (som har en mere kompleks opsætningsstruktur), tilbyder CoreProtect en fuldstændig selvstændig opstart med SQLite, detaljeret sporing af beholderes indhold samt et unikt system til forhåndsvisning af tilbagerulninger #preview. Plugin'ets eneste tekniske begrænsning er den betydelige belastning på disklageret under oprydning af store lokale SQLite-databaser, og derfor anbefales store projekter at bruge dedikerede MySQL DBMS på hurtige NVMe-diske. Plugin'et egner sig både til mindre private vennerservere og til store projekter med hundredvis af aktive spillere.
Installation
En typisk installation tager omkring 5 minutter. Forløbet er det samme; kun Loader og den matchende build er forskellige.
- 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.