
CoreProtect — Minecraft Java Edition 1.16 - 1.21.11+
Riippuvuudet: · Lataaja: Bukkit, Spigot, Paper, Purpur, Folia · Minecraft-versio: 1.16 - 1.21.11+ · Modin versio: 23.2 Moninpelin…
Riippuvuudet: · Lataaja: Bukkit, Spigot, Paper, Purpur, Folia · Minecraft-versio: 1.16 - 1.21.11+ · Modin versio: 23.2 Moninpelin Minecraft-palvelimet edellyttävät pelaajien toiminnan yksityiskohtaista tarkastusta, jott
Riippuvuudet:
· Lataaja: Bukkit, Spigot, Paper, Purpur, Folia
· Minecraft-versio: 1.16 - 1.21.11+
· Modin versio: 23.2
Moninpelin Minecraft-palvelimet edellyttävät pelaajien toiminnan yksityiskohtaista tarkastusta, jotta voidaan estää luvattomat muutokset karttaan ja pelin arvoesineiden varastaminen. Palvelimen vanilla-ydin ei tallenna maaston muokkaushistoriaa tai esineiden siirtelyä säiliöissä, joten ylläpitäjillä ei ole mahdollisuutta tunnistaa rikkojia tai peruuttaa tuhoja ilman karttatiedostojen täydellistä palauttamista varmuuskopioista. Palvelinlisäosa CoreProtect rekisteröi kaikki maailmaa muuttavat tapahtumat, luo yksityiskohtaisia indeksejä käyttäjien toiminnoista ja suorittaa täsmällisiä palautuksia (rollbacks) alueelle monimutkaisten parametristen kyselyiden perusteella. Työkalu toimii asynkronisessa tilassa kirjoittaen transaktiot jonoon suojellakseen palvelimen pääsäiettä viiveiltä.
1. Tietokannat ja asynkroninen lokitusarkkitehtuuri
CoreProtect-lisäosa sieppaa palvelintapahtumat Bukkit/Paper API:n tapahtumakäsittelijöiden avulla. Estääkseen palvelimen pääsäikeen (Server Thread) lukkiutumisen käsiteltäessä tuhansia tietueita sekunnissa, lisäosa käyttää asynkronista lokitusmallia. Tapahtumat (lohkon tuhoaminen, arkun varaston muuttaminen, komennon käyttö) sijoitetaan ensin sisäiseen dynaamiseen puskuriin DataQueue. Taustalla toimiva kuluttajasäie (Consumer Thread) lukee transaktiot puskurista ja kirjoittaa ne tietokantaan eräajotransaktioina (Batch processing), mikä vähentää tallennusvälineen kuormitusta.
Lisäosa tukee kahta tietokannan hallintajärjestelmää (DBMS):
1. SQLite (paikallinen, oletus): Kaikki tiedot kirjoitetaan tiedostoon database.db lisäosan hakemistossa. SQLite ei vaadi kolmannen osapuolen palveluiden asennusta, mikä tekee siitä kätevän pienille paikallisille palvelimille, joilla on alhainen transaktiotaso.
2. MySQL / MariaDB (ulkoinen palvelin): Käyttää verkkoyhteyttä erilliseen tietokantapalvelimeen. Tämä ratkaisu on alan standardi suurille palvelimille ja palvelinverkostoille, joilla on korkea pelaajamäärä (vähintään 50 pelaajaa). MySQL takaa indeksikyselyiden korkean suoritusnopeuden ja estää paikallisen tallennustilan pirstoutumisen.
Tietokannan taulukkoskeema
CoreProtect luo joukon relaatiotauluja tiedon tallennuksen optimoimiseksi. Sen sijaan, että lisäosa tallentaisi täydet tekstijonot jokaista tietuetta varten, se käyttää sanakirjatauluja yksilöllisille pelaajien nimille, maailmoille, lohkotyypeille ja olennoille.
Taulu | Tarkoitus | Pääkentät |
|---|---|---|
| Käyttäjänimien sanakirja |
|
| Pelimaailmojen sanakirja |
|
| Maailman lohkomuutosten rekisteri |
|
| Säiliöiden esineiden transaktiot |
|
| Kirjautumisistuntojen loki (sisään/ulos) |
|
| Tekstikylttien sisältö |
|
| Olentojen kuolemia ja spawneja koskevat tietueet |
|
Kaikki koordinaatit x, y, z indeksoidaan yhdessä maailmatunnisteen wid kanssa, jotta transaktioiden välitön haku tietyn säteen sisällä on mahdollista.
2. Komentosyntaksi ja suodatusparametrit
Vuorovaikutus CoreProtectin tietokannan kanssa tapahtuu tekstikomentojen avulla. Päätoiminnot ovat: tarkastus, haku, palautus ja palautuksen peruutus.
Tarkastajatila /co inspect tai /co i)
Komento vaihtaa asiakasohjelman paikalliseen tarkastustilaan. Aktivoinnin jälkeen pelaaja voi olla vuorovaikutuksessa maailman kanssa saadakseen lokit:
· Olemassa olevan lohkon vasen napsautus näyttää chatissa sen henkilön nimimerkin, joka asetti sen, sekä päivämäärän, kellonajan ja koordinaatit.
· Tyhjän pinnan (tai lohkon) oikea napsautus näyttää historian lohkoista, jotka aiemmin täyttivät tämän tilan tai jotka purettiin.
· Säiliön (arkku, uuni, tynnyri, shulker) oikea napsautus näyttää esineiden siirtelyn lokin.
Kyselyiden suodatusparametrit /co rollback, /co restore, /co lookup)
Tietojen valintaa varten lisäosa käyttää yhdistettyjä parametreja muodossa parametri:arvo. Parametrit erotetaan välilyönneillä:
1. Käyttäjä u:<nimi>): Määrittää tarkistettavan pelaajan. Voit antaa useita nimiä pilkulla erotettuna (esimerkiksi u:Stevie,Alex). Luonnontapahtumien palauttamiseen käytetään teknisiä tunnisteita:
· u:#fire – tulen leviäminen.
· u:#lava – laavan valuminen.
· u:#water – veden valuminen.
· u:#creeper – CREEPERin räjähdys.
· u:#tnt – TNT:n räjähdys.
· u:#enderman – ENDERMANin tekemä lohkojen siirtely.
2. Aika t:<arvo>): Analyysin aikaväli. Tukee mittayksiköitä: s (sekunnit), m (minuutit), h (tunnit), d (päivät), w (viikot), y (vuodet). Yksiköitä saa yhdistellä, esimerkiksi: t:2w4d6h (2 viikkoa, 4 päivää ja 6 tuntia).
3. Säde r:<luku>): Hakualueen säde lohkoina komennon suorittajan ympärillä. Tukee myös erikoisarvoja:
· r:#global – haku koko tietokannasta (kaikkien ladattujen chunkkien sisällä).
· r:#world – haku nykyisen pelimaailman sisällä.
· r:#chunk – haku pelaajan nykyisessä chunkissa.
· r:#selection (tai r:#we) – rajaa haun nykyisen WorldEdit-valinnan rajoihin.
4. Toiminto a:<tyyppi>): Suodattaa tietueet operaatiotyypin mukaan:
· a:block – lohkojen asettaminen ja tuhoaminen.
· a:+block – vain lohkojen asettaminen.
· a:-block – vain lohkojen tuhoaminen.
· a:container – varaston transaktiot.
· a:+container – esineiden lisääminen säiliöön.
· a:-container – esineiden ottaminen säiliöstä.
· a:kill – eläinten ja hirviöiden kuolema.
· a:spawn – olentojen spawn.
· a:chat – chat-viestit.
· a:command – syötetyt komennot.
· a:session – pelaajien kirjautuminen.
5. Lohkot b:<materiaali>): Rajaa haun määritettyihin materiaaleihin (esimerkiksi b:stone,oak_planks).
6. Poissulkeminen e:<materiaali>): Sulkee materiaalit pois käsittelystä (esimerkiksi e:tnt).
Palautuksen esikatselu ja operaatioiden peruutus
Virheiden minimoimiseksi laajamittaisten palautusten aikana CoreProtect tukee visuaalista simulaatiojärjestelmää:
1. Palautuskomennon suorittaminen #preview-lipulla (esimerkiksi /co rollback u:Griefer t:2h r:20 #preview) ei muuta karttatiedostoja. Sen sijaan asiakasohjelma vastaanottaa lohkomuutospaketit nykyisessä renderöintiistunnossa. Ylläpitäjä näkee maailman ”palautuksen jälkeisessä” tilassa, kun taas muille pelaajille lohkot pysyvät muuttumattomina.
#preview
/co apply
2. Tuloksen soveltamiseen käytetään komentoa /co apply.
3. Esikatselun peruuttamiseen käytetään komentoa /co cancel.
4. Jo suoritetun fyysisen palautuksen peruuttamiseen käytetään komentoa /co undo, joka palauttaa koordinaatit /co rollback -komennon suorittamista edeltäneeseen tilaan.
3. Asetustiedoston config.yml täydellinen kuvaus
Asetustiedosto hallitsee rajoituksia, lokitusparametreja ja tietokantayhteyksiä.
Yleisten parametrien lohko (General Settings)
· verbose: true – tulostaa konsoliin yksityiskohtaisen raportin jokaisesta muokatusta koordinaatista palautusten suorittamisen aikana. Jos arvoksi asetetaan false, tulostetaan vain muutettujen lohkojen kokonaismäärä.
· check-updates: true – tarkistaa käynnistyksen yhteydessä, onko kehittäjän palvelimilla lisäosan uusia versioita.
· api-enabled: true – sallii kolmannen osapuolen lisäosien olla vuorovaikutuksessa CoreProtectin tietojen kanssa.
· default-radius: 10 – palautuksen oletussäde, jos tätä parametria ei ole määritetty komennossa.
· max-radius: 250 – rajoittaa yhden komennon enimmäissäteen. Arvo 0 poistaa rajoituksen.
Lokitusparametrien lohko (Logging Settings)
Nämä parametrit määrittävät, mitkä tapahtumat tarkalleen kirjataan tietokantaan. Tarpeettomien lokien poistaminen käytöstä auttaa pienentämään tietokannan kokoa:
· block-place: true / block-break: true – pelaajien tavallisen lohkojen asettamisen ja tuhoamisen lokitus.
· natural-break: true – lohkojen putoamisen lokitus, kun se johtuu siirtymistä tai tukilohkojen tuhoutumisesta (esimerkiksi rikotaan lohko, jolla soihtu oli kiinni).
· block-movement: true – hiekan, soran tai betonin painovoimaisen putoamisen lokitus.
· pistons: true – lohkojen männillä tapahtuvan siirtelyn lokitus.
· block-burn: true – tulen aiheuttaman lohkojen tuhoutumisen lokitus.
· block-ignite: true – pelaajien tulukset ja teräs- tai tulipallojen avulla tapahtuvan lohkojen sytyttämisen lokitus.
· explosions: true – TNT:n, CREEPERien, Netherin sänkyjen tai Endin kristallien räjähdysten lokitus.
· entity-kills: true – kyläläisten, eläinten, hirviöiden ja haarniskatelineiden kuoleman rekisteröinti.
· player-chat: true / player-command: true – chat-viestien ja konsolikomentojen lokitus.
· player-session: true – pelaajien palvelimelle kirjautumisen ja sieltä poistumisen ajankohtien lokitus.
· container-transactions: true – arkuissa, uuneissa, suppiloissa ja shulkereissa tapahtuvan esineiden siirtelyn lokitus.
Tietokannan lohko (Database Settings)
· use-mysql: false – tietokantatyypin kytkin. Jos arvoksi asetetaan true, lisäosa muodostaa yhteyden ulkoiseen MySQL DBMS:ään.
· table-prefix: co_ – SQL-taulujen nimien etuliite.
· mysql-host: localhost – MySQL-tietokantapalvelimen IP-osoite tai verkkotunnus.
· mysql-port: 3306 – yhteyden verkkoportti.
· mysql-database: minecraft – kohdetietokannan nimi.
· mysql-username: root – tietokannan käyttäjänimi.
· mysql-password: password – käyttäjän salasana.
· mysql-ssl: false – ottaa käyttöön tietokantapalvelimen yhteyden SSL-salauksen.
4. API lisäosakehittäjille
CoreProtect tarjoaa kehittäjille pääsyn tietokantaansa luokan CoreProtectAPI kautta. Tämä mahdollistaa muiden lisäosien (esimerkiksi WorldEdit tai suojausjärjestelmät) rekisteröidä omat muutoksensa tai suorittaa automaattisen historiahaun.
API:n alustus
API:in yhdistämiseen käytetään alustusmetodia:
import net.coreprotect.CoreProtect; |
API-rajapinnan päämetodit
· boolean logPlacement(String user, Location location, Material type, BlockData blockData) – rekisteröi lohkon asettamisen tietokantaan määritetyn käyttäjän nimissä.
· boolean logRemoval(String user, Location location, Material type, BlockData blockData) – rekisteröi lohkon tuhoamisen.
· boolean logContainerTransaction(String user, Location location, Material type, ItemStack itemStack, boolean isAdded) – kirjaa esineiden lisäämisen (true) tai poistamisen (false) säiliöstä.
· List<String[]> performLookup(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – suorittaa haun määritettyjen suodattimien mukaan ja palauttaa tulostaulukon.
· List<String[]> performRollback(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – käynnistää maailman muutosten asynkronisen palautuksen.
· List<String[]> performRestore(int time, List<String> restrictUsers, List<String> excludeUsers, List<Object> restrictBlocks, List<Object> excludeBlocks, List<Integer> restrictActions, int radius, Location location) – käynnistää muutosten asynkronisen ennallistamisen.
· boolean hasPlaced(String user, Block block, int time, int offset) – tarkistaa, asettiko määritetty pelaaja tämän lohkon tietyn ajan kuluessa.
· boolean hasRemoved(String user, Block block, int time, int offset) – tarkistaa, tuhosiko määritetty pelaaja tämän lohkon.
5. Suorituskyky, yhteensopivuus ja ylläpito
Käyttäessään CoreProtectia palvelimilla, joilla on suuri pelaajamäärä, ylläpitäjät ottavat huomioon vuorovaikutuksen erityispiirteet nykyaikaisten palvelinarkkitehtuurien kanssa:
· Folian tuki: Folian palvelinydin käyttää alueellistettua monisäikeisyyttä (Regionized multithreading), mikä edellyttää lisäosilta tiukkaa säieturvallisuutta maailman kanssa työskenneltäessä. CoreProtect on mukautettu toimimaan Foliassa: operaatioiden /co rollback ja /co restore suoritus tapahtuu aluesuunnittelijan (Region Scheduler) kautta, mikä estää chunkkien käyttöön liittyvät ristiriidat ja kriittiset virheet, kuten ConcurrentModificationException.
· MultiPaper-klusterointi: MultiPaper-tyyppisillä palvelimilla CoreProtect määritetään käyttämään yhtä ulkoista MySQL-tietokantaa. Tämä auttaa synkronoimaan pelaajien toimintahistorian klusterin eri palvelinsolmuissa.
· Tietokannan puhdistus (Purge): Paikallinen SQLite-tietokanta pirstoutuu ajan myötä ja kasvaa, mikä hidastaa komentojen suorittamista. Komento /co purge t:30d poistaa tietueet, jotka ovat yli 30 päivää vanhoja. Tietokannan puhdistuksen jälkeen SQLite-tiedosto database.db ei pienene automaattisesti, koska SQLite DBMS säilyttää vapaat sivut tulevia kirjoituksia varten. Tiedoston fyysiseksi pienentämiseksi levyllä on suoritettava komento VACUUM tietokantakonsolin kautta tai pysäytettävä palvelin ja suoritettava pakkaus kolmannen osapuolen apuohjelmilla. MySQL:n käyttö poistaa tämän ongelman, koska MySQL DBMS vapauttaa käyttämättömän levytilan tehokkaammin.
Yhteenveto
CoreProtect on standardi lokitus- ja palautusjärjestelmille Minecraft Java Edition -palvelimilla. Toisin kuin vaihtoehdot kuten LogBlock (joka tukee vain MySQL:n käyttöä ja rajoittuu lohkojen lokitukseen) tai Prism (jolla on monimutkaisempi asetusrakenne), CoreProtect tarjoaa täysin itsenäisen käynnistyksen SQLitellä, säiliöiden sisällön yksityiskohtaisen seurannan sekä ainutlaatuisen palautusten esikatselujärjestelmän #preview. Lisäosan ainoa tekninen rajoitus on levytallennukseen kohdistuva merkittävä kuormitus suurten paikallisten SQLite-tietokantojen puhdistuksen aikana, minkä vuoksi suurille projekteille suositellaan omistettujen MySQL DBMS:ien käyttöä nopeilla NVMe-levyillä. Lisäosa sopii sekä pienille kavereiden yksityispalvelimille että laajamittaisille projekteille, joilla on satoja aktiivisia pelaajia.
Asennus
Tyypillinen asennus vie noin 5 minuuttia. Kulku on sama; vain Loader ja sopiva build vaihtuvat.
- 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.








