
CoreProtect — Minecraft Java Edition 1.16 - 1.21.11+
Beroenden: · Laddare: Bukkit, Spigot, Paper, Purpur, Folia · Minecraft-version: 1.16 - 1.21.11+ · Mod-version: 23.2 Minecraft-servrar för…
Beroenden: · Laddare: Bukkit, Spigot, Paper, Purpur, Folia · Minecraft-version: 1.16 - 1.21.11+ · Mod-version: 23.2 Minecraft-servrar för flera spelare kräver en detaljerad granskning av spelarnas handlingar för att för
Beroenden:
· Laddare: Bukkit, Spigot, Paper, Purpur, Folia
· Minecraft-version: 1.16 - 1.21.11+
· Mod-version: 23.2
Minecraft-servrar för flera spelare kräver en detaljerad granskning av spelarnas handlingar för att förhindra obehöriga ändringar av kartan och stöld av värdefulla föremål i spelet. Serverns vanilla-kärna registrerar inte historiken över landskapsredigeringar eller förflyttning av föremål i behållare, så administratörer saknar möjligheten att identifiera överträdare eller ångra förstörelse utan en fullständig återställning av kartfilerna från säkerhetskopior. Serverpluginet CoreProtect registrerar alla händelser som förändrar världen, skapar detaljerade index över användarnas handlingar och utför punktvisa återställningar (rollbacks) av området baserat på komplexa parametriska frågor. Verktyget arbetar i asynkront läge och skriver transaktioner till en kö för att skydda serverns huvudtråd mot fördröjningar.
1. Databaser och asynkron loggningsarkitektur
CoreProtect-pluginet fångar upp serverhändelser med hjälp av händelsehanterarna i Bukkit/Paper API. För att förhindra att serverns huvudtråd (Server Thread) blockeras under bearbetning av tusentals poster per sekund använder pluginet en asynkron loggningsmodell. Händelser (förstörelse av ett block, ändring av en kistas inventarium, användning av ett kommando) placeras först i en intern dynamisk buffert DataQueue. En konsumenttråd i bakgrunden (Consumer Thread) läser transaktionerna från bufferten och skriver dem till databasen i batchtransaktioner (Batch processing), vilket minskar belastningen på lagringsmediet.
Pluginet stöder arbete med två databashanteringssystem (DBMS):
1. SQLite (lokalt som standard): All information skrivs till filen database.db i pluginets katalog. SQLite kräver inte installation av tredjepartstjänster, vilket gör det bekvämt för mindre lokala servrar med en låg transaktionsnivå.
2. MySQL / MariaDB (extern server): Använder en nätverksanslutning till en separat databasserver. Denna lösning är industristandard för stora servrar och servernätverk med ett högt antal samtidiga spelare (från 50 spelare). MySQL säkerställer en hög exekveringshastighet för indexfrågor och utesluter fragmentering av den lokala lagringen.
Databasens tabellschema
CoreProtect skapar en uppsättning relationstabeller för att optimera datalagringen. I stället för att lagra fullständiga textsträngar för varje post använder pluginet uppslagstabeller för unika spelarnamn, världar, blocktyper och entiteter.
Tabell | Syfte | Huvudfält |
|---|---|---|
| Uppslagstabell för användarnamn |
|
| Uppslagstabell för spelvärldar |
|
| Register över blockändringar i världen |
|
| Transaktioner med föremål i behållare |
|
| Logg över inloggningssessioner (in/ut) |
|
| Innehåll i textskyltar |
|
| Poster över varelsers död och spawn |
|
Alla koordinater x, y, z indexeras tillsammans med världs-id:t wid för att säkerställa en omedelbar sökning efter transaktioner inom en given radie.
2. Kommandosyntax och filtreringsparametrar
Interaktionen med CoreProtects databas sker med hjälp av textkommandon. Huvudoperationerna är: inspektion, sökning, återställning och ångring av återställning.
Inspektörsläge /co inspect eller /co i)
Kommandot växlar klienten till lokalt granskningsläge. Efter aktivering kan spelaren interagera med världen för att hämta loggar:
· Vänsterklick på ett befintligt block visar i chatten smeknamnet på den som placerade det, samt datum, tid och koordinater.
· Högerklick på en tom yta (eller ett block) visar historiken över de block som tidigare upptog detta utrymme eller som har tagits bort.
· Högerklick på en behållare (kista, ugn, tunna, shulker) visar loggen över förflyttning av föremål.
Filtreringsparametrar för frågor /co rollback, /co restore, /co lookup)
För att välja ut data använder pluginet kombinerade parametrar i formatet parameter:värde. Parametrar separeras med mellanslag:
1. Användare u:<namn>): Anger spelaren som ska kontrolleras. Du kan ange flera namn separerade med kommatecken (till exempel u:Stevie,Alex). För att återställa naturliga händelser används tekniska identifierare:
· u:#fire – eldspridning.
· u:#lava – lavautflöde.
· u:#water – vattenutflöde.
· u:#creeper – explosion från en CREEPER.
· u:#tnt – explosion från TNT.
· u:#enderman – förflyttning av block av en ENDERMAN.
2. Tid t:<värde>): Tidsintervall för analysen. Stöder måttenheter: s (sekunder), m (minuter), h (timmar), d (dagar), w (veckor), y (år). Det är tillåtet att kombinera enheter, till exempel: t:2w4d6h (2 veckor, 4 dagar och 6 timmar).
3. Radie r:<tal>): Sökzonens radie i block runt den som utför kommandot. Stöder också specialvärden:
· r:#global – sökning i hela databasen (inom alla inlästa chunks).
· r:#world – sökning inom den aktuella spelvärlden.
· r:#chunk – sökning i spelarens aktuella chunk.
· r:#selection (eller r:#we) – begränsar sökningen till gränserna för den aktuella WorldEdit-markeringen.
4. Åtgärd a:<typ>): Filtrerar poster efter operationstyp:
· a:block – placering och förstörelse av block.
· a:+block – endast placering av block.
· a:-block – endast förstörelse av block.
· a:container – inventarietransaktioner.
· a:+container – tillägg av föremål i en behållare.
· a:-container – borttagning av föremål från en behållare.
· a:kill – djurs och monsters död.
· a:spawn – spawn av entiteter.
· a:chat – chattmeddelanden.
· a:command – inmatade kommandon.
· a:session – spelarinloggning.
5. Block b:<material>): Begränsar sökningen till de angivna materialen (till exempel b:stone,oak_planks).
6. Uteslutning e:<material>): Utesluter material från bearbetningen (till exempel e:tnt).
Förhandsvisning av återställning och ångring av operationer
För att minimera fel under storskaliga återställningar stöder CoreProtect ett system för visuell simulering:
1. Att köra återställningskommandot med flaggan #preview (till exempel /co rollback u:Griefer t:2h r:20 #preview) ändrar inte kartfilerna. I stället tar klienten emot paket med blockändringar i den aktuella renderingssessionen. Administratören ser världen i tillståndet "efter återställning", medan blocken förblir oförändrade för andra spelare.
#preview
/co apply
2. För att tillämpa resultatet använder man kommandot /co apply.
3. För att avbryta förhandsvisningen använder man kommandot /co cancel.
4. För att ångra en redan utförd fysisk återställning tillämpar man kommandot /co undo, som återför koordinaterna till tillståndet innan /co rollback kördes.
3. Fullständig beskrivning av konfigurationsfilen config.yml
Konfigurationsfilen styr gränser, loggningsparametrar och databasanslutningar.
Block med allmänna parametrar (General Settings)
· verbose: true – skriver ut en detaljerad rapport i konsolen om varje modifierad koordinat under utförandet av återställningar. Om värdet sätts till false visas endast det totala antalet ändrade block.
· check-updates: true – kontrollerar vid uppstart om det finns nya versioner av pluginet på utvecklarens servrar.
· api-enabled: true – tillåter tredjepartsplugins att interagera med CoreProtects data.
· default-radius: 10 – standardradie för återställning, om denna parameter inte anges i kommandot.
· max-radius: 250 – begränsar den maximala radien för ett enskilt kommando. Värdet 0 tar bort begränsningen.
Block med loggningsparametrar (Logging Settings)
Dessa parametrar avgör vilka händelser som specifikt skrivs till databasen. Att inaktivera onödiga loggar hjälper till att minska databasens storlek:
· block-place: true / block-break: true – loggning av spelarnas vanliga placering och förstörelse av block.
· natural-break: true – loggning av block som faller till följd av förskjutningar eller förstörelse av stödblock (till exempel när man bryter blocket som en fackla hängde på).
· block-movement: true – loggning av gravitationsfall av sand, grus eller betong.
· pistons: true – loggning av förflyttning av block med hjälp av kolvar.
· block-burn: true – loggning av förstörelse av block genom eld.
· block-ignite: true – loggning av spelarnas antändning av block med hjälp av flinta och stål eller eldklot.
· explosions: true – loggning av explosioner från TNT, CREEPERS, sängar i Nether eller End-kristaller.
· entity-kills: true – registrering av byinvånares, djurs, monsters och rustningsställs död.
· player-chat: true / player-command: true – loggning av chattmeddelanden och konsolkommandon.
· player-session: true – loggning av spelarnas in- och utloggningstider på servern.
· container-transactions: true – loggning av förflyttning av föremål i kistor, ugnar, trattar och shulkers.
Databasblock (Database Settings)
· use-mysql: false – omkopplare för databastyp. Om värdet sätts till true ansluter pluginet till ett externt MySQL-DBMS.
· table-prefix: co_ – prefix för namnen på SQL-tabeller.
· mysql-host: localhost – IP-adress eller domännamn för MySQL-databasservern.
· mysql-port: 3306 – nätverksport för anslutningen.
· mysql-database: minecraft – namnet på måldatabasen.
· mysql-username: root – databasens användarnamn.
· mysql-password: password – användarens lösenord.
· mysql-ssl: false – aktiverar SSL-kryptering av anslutningen till databasservern.
4. API för pluginutvecklare
CoreProtect ger utvecklare åtkomst till sin databas via klassen CoreProtectAPI. Detta gör att andra plugins (till exempel WorldEdit eller skyddssystem) kan registrera sina ändringar eller utföra automatiska historiksökningar.
Initiering av API:et
För att ansluta till API:et använder man initieringsmetoden:
import net.coreprotect.CoreProtect; |
API-gränssnittets huvudmetoder
· boolean logPlacement(String user, Location location, Material type, BlockData blockData) – registrerar placeringen av ett block i databasen i den angivna användarens namn.
· boolean logRemoval(String user, Location location, Material type, BlockData blockData) – registrerar förstörelsen av ett block.
· boolean logContainerTransaction(String user, Location location, Material type, ItemStack itemStack, boolean isAdded) – registrerar operationen att lägga till (true) eller ta bort (false) föremål från en behållare.
· 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ör en sökning enligt de angivna filtren och returnerar en array med resultat.
· List<String[]> performRollback(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – initierar en asynkron återställning av ändringar i världen.
· List<String[]> performRestore(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – initierar en asynkron återställning av ändringar.
· boolean hasPlaced(String user, Block block, int time, int offset) – kontrollerar om den angivna spelaren har placerat detta block inom en viss tid.
· boolean hasRemoved(String user, Block block, int time, int offset) – kontrollerar om den angivna spelaren har förstört detta block.
5. Prestanda, kompatibilitet och underhåll
Vid arbete med CoreProtect på servrar med många samtidiga spelare tar administratörer hänsyn till särdragen i interaktionen med moderna serverarkitekturer:
· Stöd för Folia: Folias serverkärna använder regionaliserad multitrådning (Regionized multithreading), vilket kräver strikt trådsäkerhet av plugins vid arbete med världen. CoreProtect är anpassat för att fungera i Folia: utförandet av operationerna /co rollback och /co restore sker via regionschemaläggaren (Region Scheduler), vilket förhindrar konflikter vid åtkomst till chunks och kritiska fel som ConcurrentModificationException.
· MultiPaper-klustring: På servrar av typen MultiPaper konfigureras CoreProtect för att använda en enda extern MySQL-databas. Detta hjälper till att synkronisera historiken över spelarnas handlingar på klustrets olika servernoder.
· Rensning av databasen (Purge): Den lokala SQLite-databasen fragmenteras med tiden och växer, vilket gör att kommandon utförs långsammare. Kommandot /co purge t:30d raderar poster som är äldre än 30 dagar. Efter rensning av databasen minskar SQLite-filen database.db inte automatiskt i storlek, eftersom SQLite-DBMS sparar lediga sidor för framtida poster. För att fysiskt minska filen på disken måste man köra kommandot VACUUM via databaskonsolen, eller stoppa servern och utföra komprimeringen med hjälp av tredjepartsverktyg. Användning av MySQL eliminerar detta problem, eftersom MySQL-DBMS frigör oanvänt diskutrymme mer effektivt.
Slutsats
CoreProtect är standarden för logg- och återställningssystem på Minecraft Java Edition-servrar. Till skillnad från alternativ som LogBlock (som endast stöder arbete med MySQL och är begränsat till blockloggning) eller Prism (som har en mer komplex konfigurationsstruktur), erbjuder CoreProtect en helt fristående uppstart med SQLite, detaljerad spårning av behållares innehåll samt ett unikt system för förhandsvisning av återställningar #preview. Pluginets enda tekniska begränsning är den betydande belastningen på disklagringen under rensning av stora lokala SQLite-databaser, och därför rekommenderas stora projekt att använda dedikerade MySQL-DBMS på snabba NVMe-diskar. Pluginet passar både för mindre privata vänservrar och för storskaliga projekt med hundratals aktiva spelare.
Installation
En typisk installation tar ungefär 5 minuter. Flödet är detsamma; bara Loader och den matchande builden skiljer sig.
- 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.








