
CoreProtect — Minecraft Java Edition 1.16 - 1.21.11+
Avhengigheter: · Laster: Bukkit, Spigot, Paper, Purpur, Folia · Minecraft-versjon: 1.16 - 1.21.11+ · Mod-versjon: 23.2 Flerspiller-servere…
Avhengigheter: · Laster: Bukkit, Spigot, Paper, Purpur, Folia · Minecraft-versjon: 1.16 - 1.21.11+ · Mod-versjon: 23.2 Flerspiller-servere i Minecraft trenger en detaljert revisjon av spillernes handlinger for å forhind
Avhengigheter:
· Laster: Bukkit, Spigot, Paper, Purpur, Folia
· Minecraft-versjon: 1.16 - 1.21.11+
· Mod-versjon: 23.2
Flerspiller-servere i Minecraft trenger en detaljert revisjon av spillernes handlinger for å forhindre uautoriserte endringer av kartet og tyveri av verdifulle gjenstander i spillet. Serverens vanilla-kjerne registrerer verken historikken for redigering av terrenget eller flytting av gjenstander i beholdere, og derfor har administratorene ingen mulighet til å identifisere lovbrytere eller angre ødeleggelser uten å gjenopprette kartfilene fullstendig fra sikkerhetskopier. Server-pluginen CoreProtect registrerer alle hendelser som endrer verden, oppretter detaljerte indekser over brukernes handlinger og utfører punktvise tilbakerullinger (rollbacks) av området basert på komplekse parametriske spørringer. Verktøyet fungerer i asynkron modus og skriver transaksjoner i en kø for å beskytte serverens hovedtråd mot forsinkelser.
1. Databaser og asynkron loggingsarkitektur
Pluginen CoreProtect fanger opp serverhendelser ved hjelp av hendelsesbehandlere i Bukkit/Paper API. For å unngå blokkering av serverens hovedtråd (Server Thread) under behandling av tusenvis av oppføringer per sekund, bruker pluginen en asynkron loggingsmodell. Hendelser (ødeleggelse av en blokk, endring av kistens inventar, bruk av en kommando) plasseres først i en intern dynamisk buffer DataQueue. En bakgrunns-forbrukertråd (Consumer Thread) leser transaksjonene fra bufferen og skriver dem til databasen i satsvise transaksjoner (Batch processing), noe som reduserer belastningen på lagringsenheten.
Pluginen støtter arbeid med to databasestyringssystemer (DBMS):
1. SQLite (lokalt som standard): All informasjon skrives til filen database.db i pluginens katalog. SQLite krever ikke installasjon av tredjepartstjenester, noe som gjør det praktisk for små lokale servere med lavt transaksjonsnivå.
2. MySQL / MariaDB (ekstern server): Bruker en nettverkstilkobling til en separat databaseserver. Denne løsningen er industristandarden for store servere og servernettverk med høyt antall samtidige spillere (fra 50 spillere). MySQL sikrer høy utførelseshastighet for indekserte spørringer og eliminerer fragmentering av det lokale lageret.
Databasens tabellskjema
CoreProtect oppretter et sett med relasjonelle tabeller for å optimalisere datalagringen. I stedet for å lagre fullstendige tekststrenger for hver oppføring, bruker pluginen ordboktabeller for unike spillernavn, verdener, blokktyper og entiteter.
Tabell | Formål | Hovedfelter |
|---|---|---|
| Ordbok over brukernavn |
|
| Ordbok over spillverdener |
|
| Register over blokkendringer i verden |
|
| Transaksjoner av gjenstander i beholdere |
|
| Logg over påloggingsøkter (inn/ut) |
|
| Innhold på tekstskilt |
|
| Registreringer av død og oppdukking av skapninger |
|
Alle koordinatene x, y, z indekseres sammen med verdensidentifikatoren wid for å sikre øyeblikkelig søk etter transaksjoner innenfor en gitt radius.
2. Kommandosyntaks og filtreringsparametre
Samhandling med CoreProtects database skjer ved hjelp av tekstkommandoer. Hovedoperasjonene er: inspeksjon, søk, tilbakerulling og angring av tilbakerulling.
Inspektørmodus /co inspect eller /co i)
Kommandoen setter klienten i lokal revisjonsmodus. Etter aktivering kan spilleren samhandle med verden for å hente loggene:
· Venstreklikk på en eksisterende blokk viser i chatten kallenavnet til den som plasserte den, samt dato, klokkeslett og koordinater.
· Høyreklikk på en tom flate (eller blokk) viser historikken til blokkene som tidligere opptok dette området eller som ble fjernet.
· Høyreklikk på en beholder (kiste, ovn, tønne, shulker) viser loggen over flytting av gjenstander.
Filtreringsparametre for spørringer /co rollback, /co restore, /co lookup)
For utvalg av data bruker pluginen kombinerte parametre i formatet parameter:verdi. Parametrene skilles med mellomrom:
1. Bruker u:<navn>): Angir spilleren som skal kontrolleres. Det er mulig å angi flere navn atskilt med komma (for eksempel u:Stevie,Alex). For å tilbakerulle naturlige hendelser brukes tekniske identifikatorer:
· u:#fire – spredning av ild.
· u:#lava – lavasøl.
· u:#water – vannsøl.
· u:#creeper – eksplosjon av en creeper.
· u:#tnt – eksplosjon av TNT.
· u:#enderman – flytting av blokker av en enderman.
2. Tid t:<verdi>): Tidsintervall for analysen. Støtter måleenhetene: s (sekunder), m (minutter), h (timer), d (dager), w (uker), y (år). Det er tillatt å kombinere enheter, for eksempel: t:2w4d6h (2 uker, 4 dager og 6 timer).
3. Radius r:<tall>): Radius for søkeområdet i blokker rundt den som utfører kommandoen. Støtter også spesialverdier:
· r:#global – søk i hele databasen (innenfor alle innlastede chunks).
· r:#world – søk innenfor den nåværende spillverdenen.
· r:#chunk – søk i spillerens nåværende chunk.
· r:#selection (eller r:#we) – begrenser søket til grensene for det gjeldende utvalgsområdet i WorldEdit.
4. Handling a:<type>): Filtrerer oppføringene etter operasjonstype:
· a:block – plassering og ødeleggelse av blokker.
· a:+block – kun plassering av blokker.
· a:-block – kun ødeleggelse av blokker.
· a:container – inventartransaksjoner.
· a:+container – legge gjenstander i en beholder.
· a:-container – ta gjenstander ut av en beholder.
· a:kill – død av dyr og monstre.
· a:spawn – oppdukking av entiteter.
· a:chat – meldinger i chatten.
· a:command – inntastede kommandoer.
· a:session – pålogging av spillere.
5. Blokker b:<materiale>): Begrenser søket til de angitte materialene (for eksempel b:stone,oak_planks).
6. Ekskludering e:<materiale>): Ekskluderer materialer fra behandlingen (for eksempel e:tnt).
Forhåndsvisning av tilbakerulling og angring av operasjoner
For å minimere feil under store tilbakerullinger støtter CoreProtect et system for visuell simulering:
1. Utførelse av tilbakerullingskommandoen med flagget #preview (for eksempel /co rollback u:Griefer t:2h r:20 #preview) endrer ikke kartfilene. I stedet mottar klienten pakker med blokkendringer i den nåværende gjengivelsesøkten. Administratoren ser verden i tilstanden «etter tilbakerulling», mens blokkene forblir uendret for de andre spillerne.
#preview
/co apply
2. For å bruke resultatet brukes kommandoen /co apply.
3. For å avbryte forhåndsvisningen brukes kommandoen /co cancel.
4. For å angre en allerede utført fysisk tilbakerulling brukes kommandoen /co undo, som setter koordinatene tilbake til tilstanden før utførelsen av /co rollback.
3. Fullstendig beskrivelse av konfigurasjonsfilen config.yml
Konfigurasjonsfilen styrer grenser, loggingsparametre og tilkobling til databaser.
Blokk med generelle parametre (General Settings)
· verbose: true – skriver en detaljert rapport til konsollen om hver endret koordinat under utførelse av tilbakerullinger. Ved innstillingen false vises kun det totale antallet endrede blokker.
· check-updates: true – kontrollerer ved oppstart om det finnes nye versjoner av pluginen på utviklerens servere.
· api-enabled: true – tillater tredjeparts-plugins å samhandle med CoreProtects data.
· default-radius: 10 – standard tilbakerullingsradius hvis denne parameteren ikke er angitt i kommandoen.
· max-radius: 250 – begrenser den maksimale radiusen for én enkelt kommando. Verdien 0 fjerner begrensningen.
Blokk med loggingsparametre (Logging Settings)
Disse parametrene bestemmer nøyaktig hvilke hendelser som skrives til databasen. Å deaktivere unødvendige logger bidrar til å redusere databasens størrelse:
· block-place: true / block-break: true – logging av vanlig plassering og ødeleggelse av blokker av spillere.
· natural-break: true – logging av at blokker faller ned som følge av forskyvninger eller ødeleggelse av støtteblokker (for eksempel ødeleggelse av blokken som en fakkel hang på).
· block-movement: true – logging av gravitasjonsbasert fall av sand, grus eller betong.
· pistons: true – logging av flytting av blokker ved hjelp av stempler.
· block-burn: true – logging av ødeleggelse av blokker ved ild.
· block-ignite: true – logging av at spillere antenner blokker ved hjelp av flintstål eller ildkuler.
· explosions: true – logging av eksplosjoner fra TNT, creepere, senger i Nether eller endekrystaller.
· entity-kills: true – registrering av død av landsbyboere, dyr, monstre og rustningsstativer.
· player-chat: true / player-command: true – logging av chatmeldinger og konsollkommandoer.
· player-session: true – logging av tidspunktet for når spillere logger inn og ut av serveren.
· container-transactions: true – logging av operasjoner med flytting av gjenstander i kister, ovner, trakter og shulkere.
Databaseblokk (Database Settings)
· use-mysql: false – bryter for databasetype. Ved innstillingen true kobler pluginen seg til et eksternt MySQL-DBMS.
· table-prefix: co_ – prefiks for navnene på SQL-tabellene.
· mysql-host: localhost – IP-adresse eller domenenavn til MySQL-databaseserveren.
· mysql-port: 3306 – nettverksport for tilkoblingen.
· mysql-database: minecraft – navnet på måldatabasen.
· mysql-username: root – brukernavnet til databasen.
· mysql-password: password – brukerens passord.
· mysql-ssl: false – aktiverer SSL-kryptering av tilkoblingen til databaseserveren.
4. API for plugin-utviklere
CoreProtect gir utviklere tilgang til sin database gjennom klassen CoreProtectAPI. Dette gjør det mulig for andre plugins (for eksempel WorldEdit eller beskyttelsessystemer) å registrere sine egne endringer eller utføre automatisk søk i historikken.
Initialisering av API
For å koble seg til API-et brukes initialiseringsmetoden:
import net.coreprotect.CoreProtect; |
Hovedmetodene i API-grensesnittet
· boolean logPlacement(String user, Location location, Material type, BlockData blockData) – registrerer plassering av en blokk i databasen på vegne av den angitte brukeren.
· boolean logRemoval(String user, Location location, Material type, BlockData blockData) – registrerer ødeleggelse av en blokk.
· boolean logContainerTransaction(String user, Location location, Material type, ItemStack itemStack, boolean isAdded) – registrerer operasjonen med å legge til (true) eller ta ut (false) gjenstander 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) – utfører et søk etter de angitte filtrene og returnerer en matrise med 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 tilbakerulling av endringene 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 gjenoppretting av endringene.
· boolean hasPlaced(String user, Block block, int time, int offset) – kontrollerer om den angitte spilleren plasserte denne blokken innenfor et bestemt tidsrom.
· boolean hasRemoved(String user, Block block, int time, int offset) – kontrollerer om den angitte spilleren ødela denne blokken.
5. Ytelse, kompatibilitet og vedlikehold
Når man bruker CoreProtect på servere med høyt antall samtidige spillere, tar administratorene hensyn til særtrekkene ved samhandling med moderne serverarkitekturer:
· Støtte for Folia: Serverkjernen Folia bruker regionalisert flertrådsplanlegging (Regionized multithreading), som krever streng trådsikkerhet fra pluginene under arbeid med verden. CoreProtect er tilpasset for å fungere i Folia: utførelsen av operasjonene /co rollback og /co restore skjer gjennom regionplanleggeren (Region Scheduler), noe som forhindrer tilgangskonflikter til chunks og kritiske feil av typen ConcurrentModificationException.
· MultiPaper-clustering: På servere av typen MultiPaper konfigureres CoreProtect til å bruke én enkelt ekstern MySQL-database. Dette bidrar til å synkronisere historikken over spillernes handlinger på de ulike nodene i klyngen.
· Opprydding i databasen (Purge): Den lokale SQLite-databasen fragmenteres og vokser over tid, noe som bremser utførelsen av kommandoer. Kommandoen /co purge t:30d sletter oppføringer som er eldre enn 30 dager. Etter opprydding i SQLite-databasen reduseres ikke filen database.db i størrelse automatisk, fordi DBMS-et SQLite beholder de ledige sidene for fremtidige oppføringer. For å redusere filen fysisk på disken må man kjøre kommandoen VACUUM via databasekonsollen eller stoppe serveren og utføre komprimeringen ved hjelp av tredjepartsverktøy. Bruk av MySQL eliminerer dette problemet, fordi DBMS-et MySQL frigjør ubrukt diskplass mer effektivt.
Konklusjon
CoreProtect er standarden for logging- og gjenopprettingssystemer på servere med Minecraft Java Edition. I motsetning til alternativer som LogBlock (som bare støtter arbeid med MySQL og er begrenset til logging av blokker) eller Prism (som har en mer komplisert konfigurasjonsstruktur), tilbyr CoreProtect en helt selvstendig drift med SQLite, detaljert sporing av innholdet i beholdere, samt et unikt system for forhåndsvisning av tilbakerullinger #preview. Pluginens eneste tekniske begrensning er den betydelige belastningen på lagringsenheten under opprydding av store lokale SQLite-databaser, og derfor anbefales store prosjekter å bruke dedikerte MySQL-DBMS på raske NVMe-disker. Pluginen passer både for små private servere blant venner og for store prosjekter med hundrevis av aktive spillere.
Installasjon
En typisk installasjon tar omtrent 5 minutter. Flyten er den samme; bare Loader og den matchende builden er forskjellige.
- 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.








