Configurazione
ShadowOptimizer
Monitor dei TPS, diagnostica leggibile del lag, pulizia intelligente e stacking.
Dove sono i file
plugins/ShadowOptimizer/ Il plugin li crea al primo avvio e li aggiorna da solo alle nuove versioni, senza toccare le tue modifiche.
Applicare le modifiche
/sopt reload Rilegge i file senza riavviare il server.
Nessuna impostazione trovata
Prova con un’altra parola, oppure cerca in tutti i plugin.
Impostazioni
I file che decidono come si comporta il plugin. Si parte da qui.
config.yml
Impostazioni generali 117 impostazioni
config.ymlplugins/ShadowOptimizer/config.yml Note del file
AGGIORNAMENTI: quando una nuova versione cambia questo file, viene portato alla nuova versione per te. Tutto ciò che hai cambiato o aggiunto viene riportato; le impostazioni che non hai mai toccato prendono i nuovi default. Il file precedente viene conservato in backup/<date>/, e se qualcosa non si è potuto riportare (un'opzione che non esiste più, un valore di tipo diverso) lo trovi in PORTING-<version>.txt, con cosa fare.
Un valore sbagliato non blocca niente: viene sostituito da quello di fabbrica e segnalato in console all'avvio, con il percorso e cosa ci si aspettava.
Dove stanno le cose:
config.yml questo file
lang/*.yml i messaggi (aggiornati allo stesso modo: i testi che hai
riscritto restano tuoi)
menus/*.yml la disposizione delle schermate
health.yml scritto da noi, letto dal pannello. Non modificarloconfig-version1core1 chiaveserver-id"auto"Il nome di questo server nello storico dei TPS.
Conta solo quando più server scrivono sullo stesso MySQL: è la colonna che tiene separati i grafici. "auto" usa il nome della macchina e la porta, che due server sulla stessa macchina non possono avere in comune.
Il monitor dei TPS
Un solo task programmato, una volta al secondo, che legge quattro numeri che il server tiene già aggiornati per conto suo. Il costo è indistinguibile da zero, e non è un dettaglio: un plugin che misura il lag non può permettersi di produrne.
monitor2 chiavicount-every15Ogni quanti campioni contare anche entità e chunk.
È l'unica lettura che costa qualcosa: significa chiedere a ogni mondo quante entità contiene. Un conteggio ogni quindici secondi risponde alla stessa domanda di uno al secondo e costa un quindicesimo. Alzalo se hai molti mondi; non c'è motivo di abbassarlo.
history-hours72Quante ore di storico tenere nel database.
Una riga al minuto, quindi 1440 righe al giorno: 72 ore sono poco più di quattromila righe, cioè niente. Alzalo se vuoi rispondere a "da quando sta peggiorando?" su settimane invece che su giorni.
La diagnostica
La parte che risponde alla vera domanda: non "quanti TPS ho" ma "da cosa dipendono". È anche l'unica cosa costosa che fa questo plugin, ed è per questo che non la fa di continuo.
diagnostics5 chiavibackground-scan-minutes5Quanti minuti tra una scansione in background e l'altra.
Esiste solo perché chi apre la GUI trovi un report già pronto invece di qualche secondo di attesa. Metti 0 per non farne nessuna: le scansioni su richiesta continuano a funzionare.
Nota: cleanup.items.world-limit ha bisogno che questo valore sia sopra zero, perché il conteggio degli item per mondo viene aggiornato da questa scansione e da nient'altro.
chunks-per-tick48Quanti chunk esaminare per tick.
La scansione dura qualche secondo invece di un tick, ed è voluto. Alzarlo rende la scansione più veloce e più percepibile: su un server già in difficoltà è esattamente lo scambio sbagliato.
max-chunks20000Il tetto massimo di chunk da esaminare in una passata.
Continua a leggere
Una rete di dieci mondi può avere centomila chunk caricati. Oltre questo numero la scansione si ferma: le prime ventimila righe di una classifica contengono comunque il colpevole.
Il budget viene diviso EQUAMENTE tra i mondi: ognuno riceve una fetta, e quello che avanza va a quelli che sono stati tagliati. Altrimenti il mondo principale - sempre il primo della lista - si prenderebbe tutto il budget e gli altri non verrebbero mai esaminati.
entries25Quante righe ha ogni classifica. 25 sono più che sufficienti per trovare un colpevole.
diagnostics.profiler3 chiaviIl campionatore: quale plugin si sta mangiando il tick.
È la funzione che nessun anti-lag gratuito ha, e funziona guardando dieci volte al secondo DOVE si trova in quel momento il thread che esegue il gioco. Non è un cronometro avvolto attorno agli eventi degli altri plugin: quella strada è invasiva, si rompe quando Paper rinomina un campo privato, e costa di più proprio quando il server è già in affanno.
enabledtruesample-interval-ms100Quanti millisecondi tra un'occhiata e l'altra.
100 significa dieci campioni al secondo, quindi 36.000 in un'ora: abbastanza perché le percentuali siano stabili. Abbassarlo rende la stima più fine e comincia a costare; alzarlo la rende rumorosa.
tick-thread-names["Server thread", "Region Scheduler", Folia]I nomi dei thread che eseguono il gioco.
Vale la pena toccarlo solo su una build del server esotica che li chiama in modo diverso. Il confronto è "il nome inizia con".
Pulizia
Ecco la differenza da ClearLag, e ce n'è una sola: PRIMA UNISCE. Quaranta stack di cobble a terra diventano cinque stack pieni, e il cobble è ancora lì. Viene tolto solo ciò che resta davvero inutile, con un avviso che si vede.
Continua a leggere
MAI rimossi: tutto ciò che ha un nome, un animale addomesticato, un mob che indossa equipaggiamento, chiunque sia dentro o in sella a un veicolo, tutto ciò che il gioco stesso ha segnato come persistente, tutto ciò che è al guinzaglio, un villager con cui qualcuno ha commerciato, e nessun armor stand, quadro o cornice - qualcuno ci ha costruito una decorazione. E niente che porti i dati di un altro plugin.
cleanup11 chiavienabledtrueinterval-minutes15Quanti minuti tra una passata e l'altra.
broadcasttrueSe annunciare in chat l'avviso e il risultato.
Lascialo attivo. Metà delle segnalazioni allo staff su un server con un anti-lag nascono da cose che spariscono senza preavviso, e un avviso che nessuno vede non è un avviso.
warning-seconds[60, 30, 10]Con quanti secondi di anticipo avvisare. La passata parte dopo l'ultimo avviso.
Continua a leggere
Una voce per avviso, in secondi prima della passata. Mettine quanti vuoi e con la spaziatura che vuoi: [30] è un solo avviso mezzo minuto prima, [120, 20] sono due, [60, 30, 10] è quello di fabbrica.
Una lista VUOTA significa nessun avviso, e la passata avviene in silenzio. È una scelta legittima su un server dove la pulizia non toglie mai niente a cui qualcuno tenga. Cancellare la chiave, invece, riporta i tre valori di fabbrica - la lista vuota e la chiave mancante sono due cose diverse apposta.
Qualunque cosa scegli qui, il RISULTATO viene sempre annunciato quando è stato dato un avviso, anche quando non è stato tolto niente. Fare il conto alla rovescia tre volte e poi tacere lascia chi ha letto a chiedersi se le sue cose ci sono ancora, che è proprio la domanda che l'avviso doveva togliere.
Un avviso più lungo di cleanup.interval-minutes arriverebbe prima della passata precedente: il plugin lo dice in console e lo lascia così.
chunks-per-tick32Quanti chunk gestire per tick.
exempt-worlds[ ]Mondi in cui la pulizia non entra mai.
È l'UNICA cosa che spegne la pulizia per un mondo: lasciala vuota e ogni mondo caricato è coperto, compresi quelli che altri plugin creano a runtime.
Le arene di ShadowGames si escludono da sole mentre una partita è in corso: non serve elencarle qui.
foreign-metadata-keys[MythicMob, shopkeeper, NPC, citizens-npc, supplierNPC, pet, MyPet, quest_mob]+5
Metadati di altri plugin che segnano un'entità come "loro".
Il PersistentDataContainer e i tag della scoreboard si possono elencare e vengono sempre controllati. I metadati Bukkit no: l'interfaccia permette solo di chiedere una chiave per nome. Da qui questa lista, che cresce senza ricompilare. È la parte meno elegante del plugin ed è il meglio che l'API consente.
ignored-data-keys[ ]Dati di altri plugin che NON rendono un'entità "loro".
Continua a leggere
Alcuni plugin scrivono una nota sui mob normali solo per ricordare come sono nati (un uovo spawn, uno spawner) - ShadowBattlePass e ShadowQuests lo fanno perché le uccisioni dei mob da farm non contino. Quei mob restano mob normali e la pulizia li rimuove: le due chiavi della suite sono sempre in questa lista, aggiungi qui quelle di altri plugin che fanno lo stesso. Formato: namespace:key, come lo mostra /data get entity.
cleanup.items4 chiavimergetrueUnisci prima di rimuovere. È il passaggio che rende il plugin diverso da tutti gli altri: spegnilo e diventa un ClearLag.
removetrueRimuovi gli item a terra: TUTTI, per quanto recenti, tranne
- i materiali in never-remove qui sotto (più la lista di fabbrica), - gli item che portano i dati di un altro plugin: chiavi delle crate, voucher, item custom (vengono riconosciuti da quei dati, niente da elencare).
Un nome scritto su un item non lo salva. Il conto alla rovescia prima della passata (warning-seconds) è l'avviso per raccogliere le cose.
world-limit600Quanti item a terra tollerare in UN mondo prima di intervenire subito. Zero disattiva la soglia.
Continua a leggere
L'intervallo qui sopra è pensato per il caso normale: ogni tot minuti si passa e si mette in ordine. Non serve a niente quando un mondo si riempie in due minuti - una farm che si rompe, qualcuno che svuota una cassa doppia, un generatore lasciato acceso - perché lì il problema nasce e fa i suoi danni dentro un solo intervallo, e alla fine del giro il server ha già passato dieci minuti a droppare ventimila item.
Con questa soglia il mondo che sta affogando viene servito subito, e DA SOLO: la passata è limitata a quel mondo, gli altri non pagano niente. Chi si trova lì riceve un avviso qualche secondo prima; chi è altrove non viene disturbato affatto.
Le regole non cambiano: unisce comunque prima, e toglie comunque solo ciò che sarebbe stato tolto in ogni caso. Una soglia bassa non rende la pulizia più aggressiva, la rende più tempestiva.
Il conteggio arriva dalla scansione in background, quindi questa soglia richiede diagnostics.background-scan-minutes sopra zero. Se è zero il plugin lo scrive in console e la disattiva, invece di lasciarla qui a non fare niente.
600 è attivo di default e volutamente alto: un mondo sano non ci arriva mai, quindi scatta solo quando qualcosa è andato davvero storto - una farm che si è rotta, un generatore lasciato acceso. Abbassalo se i tuoi mondi sono piccoli, metti 0 per disattivarlo.
never-remove[BEACON, CONDUIT, HEART_OF_THE_SEA]Materiali mai rimossi, per quanto vecchi.
Questa lista viene AGGIUNTA a quella di fabbrica, che contiene già netherite, elytra, totem, l'uovo del drago, i beacon, le mele d'oro incantate, le stelle del Nether e ogni shulker box.
cleanup.mobs5 chiaviremovetrueRimuovi i mob: TUTTI - naturali, da uova spawn, da spawner - ovunque siano e chiunque ci sia vicino, tranne
- i tipi in never-remove qui sotto (più la lista di fabbrica: animali che la gente alleva, villager, golem, boss...), - i mob con una targhetta, addomesticati, al guinzaglio, in un veicolo, - i mob di altri plugin (i loro dati, o foreign-metadata-keys qui sopra).
only-hostilefalseLimita la rimozione ai mob ostili.
DISATTIVATO di default, perché adesso c'è qualcosa di meglio: la lista qui sotto. "Solo ostili" sbaglia in due direzioni. Lascia fuori pipistrelli e calamari, che non sono ostili e che nessuno alleva: su un server con un oceano sono migliaia di entità intoccabili. E non distingue una mucca da un villager, che sono entrambi passivi e non hanno nient'altro in comune.
Attivalo solo se preferisci la regola grossolana a quella precisa.
never-remove[ ]Tipi di mob MAI rimossi, per quanto vecchi.
Continua a leggere
Questa lista risponde a una sola domanda: qualcuno ci ha speso del tempo? Gli animali si allevano, con i villager si commercia, i golem si costruiscono, i boss si evocano una volta. Tutto il resto torna da solo la notte dopo.
Questa lista viene AGGIUNTA a quella di fabbrica, che contiene già ogni animale allevabile e addomesticabile, i villager, i venditori ambulanti, i golem e i quattro boss. Aggiungi qui solo quello che ti serve in più, per esempio il mob custom di un altro plugin.
replace-defaultsfalseMetti true per NON partire dalla lista di fabbrica.
È per chi vuole TOGLIERE qualcosa da quella lista - per esempio per pulire anche le mucche, su un server dove nessuno alleva. Va detto apposta: cancellare per sbaglio il bestiame di qualcuno è esattamente il difetto che questo plugin esiste per non avere.
max-per-type{ }Quanti mob di UN tipo preciso tollerare in un mondo.
Continua a leggere
È la valvola che rende sicuro proteggere gli animali. Le mucche non vengono mai toccate, va bene - ma diecimila mucche in un mondo sono un problema del server, non bestiame. Con un tetto, l'eccesso oltre quel numero torna rimovibile, e il resto no.
Si applica ANCHE ai tipi protetti dalla lista qui sopra, ed è l'unica cosa che li scavalca. Non scavalca le tre regole di sicurezza: un mob con un giocatore vicino, o troppo giovane, o in un mondo escluso viene comunque lasciato stare. Le mucche di una farm in cui si trova il proprietario restano dove sono, e vengono sfoltite quando lui se ne va.
Zero è legittimo e significa "non ne voglio nessuno in questo mondo". Vuoto - com'è adesso - significa nessun tetto.
Esempio:
max-per-type: COW: 60 SHEEP: 60 CHICKEN: 40 IRON_GOLEM: 20
cleanup.projectiles2 chiaviremovetrueFrecce e simili che non hanno più un proprietario.
min-age-seconds60Tetti di spawn
Quante creature di ogni tipo può contenere un chunk. I limiti per chunk qui sotto contano tutto insieme; questo guarda il TIPO. Un preset dà un tetto per famiglia - ostili, animali, acquatici, ambientali, altri - e ogni singolo tipo può avere in più un numero tutto suo.
Continua a leggere
NORMAL è il gioco così com'è, con un tetto che ferma quell'unica farm che avrebbe buttato giù il server. HIGH è per una macchina con risorse in abbondanza, MEDIUM e LOW stringono di più quando il server comincia a sentire cento giocatori.
I tetti si applicano all'ingresso: niente di ciò che esiste viene rimosso, il prossimo semplicemente non nasce. Uova, accoppiamenti, comandi e ciò che altri plugin spawnano apposta non vengono mai contati né rifiutati - il tetto è per ciò che il mondo genera da solo, che è l'unico spawn che nessuno ha chiesto.
spawn-caps5 chiavienabledtruepresetNORMALHIGH | NORMAL | MEDIUM | LOW, oppure il nome di un preset che scrivi qui sotto.
spawn-caps.presets1 chiavePer famiglia, per chunk. -1 = nessun tetto. I numeri integrati, per la cronaca:
HIGH hostile 28, animal 24, water 20, ambient 14, other 28 NORMAL hostile 18, animal 16, water 14, ambient 10, other 18 MEDIUM hostile 12, animal 12, water 10, ambient 7, other 12 LOW hostile 7, animal 8, water 6, ambient 4, other 7
Scrivi qui un preset per cambiarne i numeri, o inventane uno nuovo.
spawn-caps.presets.CUSTOM5 chiavihostile18animal16water14ambient10other18spawn-capsper-typeUn tipo di entità, il suo tetto, qualunque cosa dica il preset (-1 = nessuno).
ZOMBIE: 10
COW: 24
count-cache-ms1000Per quanto tempo ci si fida del conteggio di un chunk prima di ricontarlo.
Limiti per chunk
Un mondo con ventimila entità sparse non dà nessun problema. Lo stesso mondo con ventimila entità dentro tre chunk è ingiocabile. Il chunk è l'unità giusta perché è l'unità con cui ragiona il gioco stesso.
Continua a leggere
I limiti SI APPLICANO ALL'INGRESSO: ciò che c'è già resta. Chi ha costruito una farm di mille galline se la tiene; la milleunesima gallina semplicemente non nasce.
limits12 chiavienabledtruemax-entities300-1 su qualsiasi voce significa "nessun limite".
max-mobs200max-items200max-hoppers64Hopper.
Sono la cosa più costosa che un giocatore possa costruire senza accorgersene: ognuno controlla a ogni tick se c'è qualcosa da spostare sopra di sé, anche quando è vuoto e anche quando non c'è nessuno in giro.
Oltre il limite NON vengono bloccati: vengono rallentati. Bloccarli romperebbe la farm di qualcuno senza toccare un solo blocco; rallentarli la lascia funzionante, solo più lenta.
hopper-slowdown4Oltre il limite, ogni quanti trasferimenti ne passa uno.
count-cache-ms1000Per quanti millisecondi riutilizzare il conteggio di un chunk.
Contare le entità di un chunk a ogni spawn significa contarle venti volte al secondo per lo stesso chunk. Un secondo è abbastanza breve perché il limite funzioni ed enorme rispetto a quanto spesso avvengono gli spawn.
hopper-cache-ms30000Lo stesso, per gli hopper. Nessuno ne piazza quaranta al secondo.
compact-every-ms2000Al massimo ogni quanto compattare gli item di un chunk che ha superato max-items.
Il limite degli item non annulla mai niente: quando un chunk è sopra la soglia, gli stack identici già presenti vengono uniti e il nuovo item nasce comunque. Su una farm che produce senza sosta, senza questo tetto compatterebbe decine di volte al secondo - e il plugin anti-lag diventerebbe la cosa che produce il lag.
warn-stafftrueSe avvisare in chat chi ha shadowoptimizer.notify quando un chunk raggiunge il suo limite. Il messaggio ha un cooldown tutto suo, dichiarato nel file di lingua.
Limiti diversi per mondo
Una sezione per mondo. I valori che ometti vengono ereditati da quelli generali qui sopra: cambiane uno senza copiare gli altri.
limitsworldsIl nome della sezione è il nome del mondo. Se non corrisponde a nessun mondo caricato, lo trovi scritto in console all'avvio con il percorso esatto: la sezione viene comunque letta e semplicemente non corrisponde mai a niente, ed è così che un errore di battitura qui riesce a passare inosservato per mesi.
Il controllo avviene una volta che il server è partito e non durante il nostro avvio, perché un gestore di mondi carica i suoi mondi dopo di noi: avvisare prima significherebbe avvisare di mondi che stanno per arrivare.
Esempio: l'arena del minigioco, dove non deve spawnare niente.
arena: max-mobs: 0 max-items: 500
Esempio: lo spawn, dove non servono mob.
spawn: max-mobs: 20
Limiti diversi per regione
Richiede ShadowRegions o WorldGuard. L'id è quello della regione, in minuscolo. Una regione batte sempre un mondo.
Senza un plugin di regioni installato queste sezioni non scattano mai, e lo si dice in console una volta.
limitsregionspublic_farm: max-mobs: 500 max-hoppers: 200
Il freno di emergenza
/<command> panic [minutes]. Non risolve il problema: fa guadagnare tempo. Spegne le tre cose che possono peggiorare la situazione da sole, senza che nessun giocatore faccia niente.
Gli handler degli eventi vengono registrati solo mentre il panic è attivo: su un server normale questa sezione costa esattamente zero.
panic4 chiavidefault-minutes5Quanti minuti dura quando non lo specifichi.
stop-explosionstrueEsplosioni a catena.
stop-redstonetrueRedstone. È un intervento pesante su un server, ed è per questo che il panic si attiva a mano, dura pochi minuti e viene annunciato in chat.
stop-natural-spawntrueSpawn naturale e spawn dagli spawner. Uova, comandi, accoppiamenti e plugin continuano a funzionare: sono cose che un giocatore ha chiesto, e bloccarle farebbe sembrare rotto il server.
Stacking
I mob dello stesso tipo che finiscono vicini diventano un'unica entità con un contatore sopra la testa. Cinquanta zombie in un chunk diventano un'entità sola: il costo per il server è un cinquantesimo, e i cinquanta zombie ci sono ancora tutti, nel conteggio e nel loot.
Continua a leggere
Si separano quando vengono colpiti: il colpo non arriva mai allo stack, ne esce un singolo mob ed è quello che lo prende. Loot, esperienza e quest funzionano quindi come se lo stack non ci fosse.
stacking3 chiavistacking.entities11 chiavienabledtruemax-size100Fino a quanti mob in uno stack.
Il tetto non è per il server: è per il giocatore. Uccidere uno stack di mille significa mille colpi sullo stesso punto, e a quel punto la farm non è più giocabile.
radius6.0Entro quanti blocchi cercare un compagno.
Piccolo apposta. Un raggio grande unisce mob che il giocatore vede come separati - quello davanti e quello dietro l'angolo - e l'effetto che percepisce è che i mostri "spariscono".
show-counter-from2Da quanti in su scrivere il contatore sopra la testa.
name-format"<gray>x<count> <white><type>"Come viene scritto il contatore. Formato MiniMessage. Lo leggono i giocatori, quindi può restare nella lingua del server.
same-age-onlytrueUn cucciolo non si unisce a uno stack di adulti.
same-name-onlytrueDue mob con nomi diversi non si uniscono mai. Il nome è il modo in cui un giocatore dice "questo è mio".
never-stack[COW, MOOSHROOM, SHEEP, PIG, CHICKEN, RABBIT, GOAT, BEE, HORSE, DONKEY, MULE, LLAMA, TRADER_LLAMA, CAMEL, STRIDER, TURTLE, AXOLOTL, FROG, TADPOLE, SNIFFER, ARMADILLO, PANDA, FOX, OCELOT, POLAR_BEAR, HOGLIN, WOLF, CAT, P …+51
Tipi che non vengono mai impilati.
Continua a leggere
Qui la domanda è diversa da quella della pulizia: non "qualcuno ci ha speso del tempo?", ma "ci si interagisce uno alla volta?". Uno stack è una cosa sola con un numero sopra la testa: perfetto per uno sciame di zombie, che devi solo colpire.
Non va bene per niente per l'allevamento, ed è il caso lampante: DUE MUCCHE UNITE IN UNA NON SI ACCOPPIANO. Dai il grano, ne nutri una, e il giocatore resta a chiedersi perché non funziona - senza nessun messaggio, perché per il gioco non è successo niente di strano.
Questa lista viene AGGIUNTA a quella di fabbrica, che esclude tutto ciò che si alleva, si addomestica, con cui si commercia o che si evoca una volta. Mostri, pesci e pipistrelli restano impilabili, e sono proprio quelli che si accumulano a migliaia: tutto il guadagno dello stacking e nessuno dei suoi danni.
Non serve elencare i mob di altri plugin: un'entità che porta i dati di qualcun altro non viene mai toccata, in ogni caso.
La lista qui sotto è scritta per intero apposta: ciò che il plugin protegge deve essere leggibile senza aprire il jar. Aggiungere una riga protegge un tipo in più; CANCELLARE una riga non sprotegge niente, perché la stessa lista è integrata nel plugin - per quello, metti replace-defaults a true subito sotto.
Questi la gente li alleva. Due mucche unite in una non si accoppiano.
Questi la gente li addomestica: hanno un proprietario e un nome.
Con questi la gente commercia, oppure li costruisce.
Evocati una volta.
Non sono creature, quindi non arriverebbero mai allo stacker comunque - ma la lista è qui per essere letta, e una barca o un carrello da miniera con dentro le cose di qualcuno è altrettanto fuori discussione.
Tutto ciò che NON è in quella lista viene impilato, ostile o no: pipistrelli, calamari, pesci e ogni mostro. Sono anche proprio quelli che si accumulano a migliaia, quindi è lì che sta tutto il guadagno.
replace-defaultsfalseMetti true per NON partire dalla lista di fabbrica.
È l'interruttore che rende la lista qui sopra l'unica verità, ed è l'unico modo per TOGLIERNE un tipo - per esempio per impilare anche le mucche, su un server dove nessuno alleva. Deve restare una scelta esplicita: chi lo cambia senza saperlo lo scopre dai giocatori, non dal log.
worlds[ ]Mondi in cui si applica lo stacking dei mob. Vuoto significa tutti.
also-stack-from[SPAWNER_EGG, DISPENSE_EGG]Spawn "voluti" che vengono impilati comunque.
Continua a leggere
Gli spawn naturali, i raid e i rinforzi vengono sempre impilati. I mob nati da un comando, un plugin, un accoppiamento o un uovo di gallina lanciato mai: quelli sono singoli apposta. In mezzo ci sono le uova spawn - la cosa con cui si costruisce una farm - e una farm di creeper che non si impila è esattamente il carico che questo plugin esiste per togliere. Quindi le uova sono incluse di default. Ometti questa riga per mantenere questo comportamento; scrivi la lista per scegliere tu (una lista vuota significa che anche le uova restano singole). I valori sono le cause di spawn del gioco: SPAWNER_EGG, DISPENSE_EGG, COMMAND, CUSTOM, BREEDING, EGG.
stacking.items7 chiavienabledtruemax-amount4096Fino a quante unità in un mucchio.
Alto, perché qui non c'è nessuno da far divertire: 4096 di cobble in una sola entità sono 64 entità in meno e nessuno se ne accorge.
Non alzarlo a un milione: se un giorno disinstalli il plugin, i mucchi restano come item normali con la loro quantità VISIBILE, e l'eccesso va perso. Con questo valore quello che si perde è cobble.
radius3.0show-counter-from2Da quante unità in su il contatore viene scritto sopra il mucchio. 2 significa che ogni mucchio con più di una cosa dice quante ne contiene - anche uno stack da 32 droppato, non solo un mucchio che ha superato 64.
name-format"<gray>x<count> <white><item>"never-stack[ ]Materiali che non si uniscono mai.
Non serve elencare item con incantesimi o nomi diversi: il confronto è quello del gioco stesso e guarda ogni componente. Due spade con incantesimi diversi non si uniscono mai, e qui non c'è nessuna opzione che possa cambiarlo.
worlds[ ]stacking.drops4 chiaviper-tick24Quanti drop consegnare per tick.
Uno stack di cinquanta scheletri che muore tutto insieme produce duecentocinquanta entità. Spawnarle nello stesso tick sarebbe il problema che questo plugin risolve, causato dal plugin stesso.
max-queued20000Il tetto della coda. Se qualcosa uccide diecimila mob con un solo comando, perdere dei drop è meglio che riempire la memoria. Viene scritto in console quando succede, e non è mai successo per un motivo legittimo.
max-multiplier500Il moltiplicatore massimo di loot per uno stack che muore tutto insieme. Succede solo quando qualcosa aggira il danno: /kill, il vuoto, un plugin che rimuove entità.
multiply-experiencetrueSe moltiplicare anche l'esperienza.
Raccolta diretta - ciò che un blocco droppa va nell'inventario, non a terra
direct-pickup5 chiaviOgni item droppato è una vera entità: nasce, viene inviato a ogni giocatore vicino, cade, cerca altri mucchi con cui unirsi, viene inseguito, e poi muore. In una sessione di mining sono migliaia di entità che compaiono e scompaiono per consegnare cose che finivano comunque in quello stesso inventario. Con questa opzione attiva non nascono proprio.
Continua a leggere
È disattivata di default apposta. Cambia la sensazione di gioco, e non spetta a un plugin di performance prendere quella decisione al posto di chi possiede il server.
Cosa NON cambia: niente viene mai distrutto. Ciò che non entra nell'inventario cade a terra esattamente come è sempre successo.
I blocchi i cui drop sono gestiti da un altro plugin - per esempio i blocchi custom di ShadowCustomizer - continuano a droppare a terra. Non è una svista: l'alternativa è raccoglierli due volte.
enabledfalseworlds[ ]Solo in questi mondi. Vuoto = ovunque.
never-collect[ ]Materiali che cadono sempre a terra, anche con questa opzione attiva.
Il caso per cui esiste è un blocco il cui drop è il senso dell'animazione - qualcosa che vuoi vedere atterrare.
permission''Chi ne beneficia. Vuoto = tutti.
Compilala e diventa un vantaggio di rank: "shadowoptimizer.pickup".
creative-toofalseIn creativa hai già tutto, quindi di default qui non si applica: riempirebbe solo l'inventario di spazzatura.
Drop sicuro - la prima Q chiede, la seconda lancia
La Q è accanto alla W
Un piccone di netherite con Fortuna III che finisce nel vuoto mentre corri non è una svista rara: è il modo più comune di perdere ore di gioco su qualsiasi server, e dopo non c'è niente da fare - l'item è sparito e nessuno lo riporta indietro.
Continua a leggere
Con questa opzione attiva, la prima pressione non lancia niente: avvisa. La seconda, entro pochi secondi, lancia davvero. Chi lo vuole davvero preme due volte e non se ne accorge nemmeno; chi ha sfiorato il tasto mentre correva ha ancora l'attrezzo in mano.
La conferma appartiene a QUELL'item, non al giocatore: confermare il piccone non lascia la spada senza protezione per qualche secondo - sarebbe una protezione che si spegne proprio mentre qualcuno sta martellando Q di fretta.
Non protegge da tutto e non pretende di farlo: la morte, un inventario pieno e i plugin che lanciano cose al posto tuo sono altre strade e restano aperte. Questa copre quella percorsa ogni giorno.
safe-drop8 chiavienabledtrueAttiva per tutti. Un giocatore che non la vuole la disattiva per sé con /safedrop off (ricordato in safe-drop-players.yml).
protect-damageabletrueTutto ciò che si consuma: attrezzi, armi, armature, archi, elytra.
protect-enchantedtrueTutto ciò che è incantato, anche quando non è un attrezzo. Un libro incantato vale quanto la spada su cui finirà.
protect-namedfalseTutto ciò che un giocatore ha rinominato. Disattivato di default: anche uno stack di terra rinominato comincerebbe a fare domande.
always-protect[ ]Sempre protetti, qualunque cosa dicano i tre interruttori qui sopra.
never-protect[ ]Mai protetti, anche quando loro dicono di sì.
confirm-seconds5Quanto tempo ha la seconda Q per arrivare.
worlds[ ]Solo in questi mondi. Vuoto = ovunque.
Spawner
Invece di spawnare quattro mob quattro volte al minuto, ne spawna UNO che vale per sedici e sposta in avanti il prossimo giro dello spawner in proporzione. Il ritmo della farm è identico - stessi mob al minuto, stesso loot - e le entità create sono un sedicesimo.
Continua a leggere
Funziona appoggiandosi allo stacking dei mob: con quello spento questa sezione non fa niente, perché un lotto di sedici senza stacking sarebbe sedici entità nate insieme, cioè l'opposto.
spawners6 chiavienabledtruebase-batch4Quanto è grande un lotto per uno spawner da solo.
max-batch16Il tetto, anche con molti spawner raggruppati.
group-in-chunktrueTratta gli spawner di uno stesso chunk come uno solo.
È questo che trasforma sessanta spawner su due chunk in due eventi invece di sessanta.
nearby-cap64Quanti mob dello stesso tipo intorno a uno spawner prima di fermarlo.
Il conteggio somma le dimensioni degli stack: uno stack di cinquanta conta cinquanta, altrimenti il limite si annullerebbe da solo proprio grazie all'ottimizzazione.
nearby-radius16Entro quanti blocchi contare.
Dove va lo storico
Questo database riceve una riga al minuto con i TPS medi, e una riga per ogni passata di pulizia. Tutto il resto vive in memoria e muore al riavvio, perché sono domande sul server IN QUESTO MOMENTO.
storage5 chiavistorage.mysql7 chiavienabledfalsefalse = database H2 locale dentro plugins/ShadowOptimizer/data/. Niente da installare: il plugin funziona appena lo copi.
MySQL serve a una cosa: vedere i TPS di tutti i server di una rete in un solo grafico.
host127.0.0.1port3306databaseshadowoptimizerusernamerootpassword""parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"storagetable-prefix"so_"Prefisso delle tabelle.
fallback-to-localtrueMySQL configurato ma irraggiungibile: con true il plugin lo dice in console e ripiega sul file locale, così il server parte lo stesso.
storage.pool5 chiavimaximum-pool-size4Piccolo apposta: questo plugin scrive una riga al minuto. Un pool di dieci connessioni per due insert è memoria buttata.
minimum-idle1connection-timeout-ms10000idle-timeout-ms600000max-lifetime-ms1800000storage.h21 chiaveauto-serverfalsePermette a un altro processo (un pannello web, per dire) di aprire lo stesso file H2 mentre il server è acceso. Serve di rado.
Messaggi
Questo è l'unico posto in cui la lingua è un'impostazione e non una regola. Tutto ciò che legge il plugin - chiavi, sezioni, comandi - è in inglese; tutto ciò che legge un giocatore vive in lang/ e segue questa impostazione.
messages2 chiavidefault-locale"en_US"La lingua usata quando non se ne trova una migliore.
Include en_US e it_IT. Metti "it_IT" qui per un server italiano.
follow-client-localetrueSegui la lingua che ogni giocatore ha impostato nel suo client.
Con due lingue incluse, significa che chi parla inglese legge in inglese senza fare niente. Una chiave mancante ripiega sulla lingua di default, chiave per chiave: una traduzione incompleta funziona lo stesso.
Integrazioni
Tutte opzionali. Il plugin parte e funziona su un server senza nient'altro della suite installato, e quando un pezzo si spegne perché manca un altro plugin lo si scrive in console una volta.
integrations1 chiaveintegrations.shadowcontrol2 chiavipublish-healthtrueScrivi health.yml nella nostra cartella, così il pannello può mostrare lo stato di salute del server accanto agli aggiornamenti.
publish-seconds30Quanti secondi tra una riscrittura e l'altra.
bStats
Risponde a una domanda, e non per curiosità: quale versione di Minecraft si può smettere di supportare. Senza quel numero la risposta è un'opinione, e sbagliarla significa rompere il server a duecento persone in un pomeriggio.
Continua a leggere
Cosa viene inviato, ogni 30 minuti (https://bstats.org): che questo server usa ShadowOptimizer, le versioni del plugin, di Minecraft/Paper e di Java, il sistema operativo, il numero di core della CPU, quanti giocatori sono online (un numero, nient'altro), un serverUuid casuale che non identifica niente, e se lo storico è sul file locale o su MySQL.
Non esce nessun dato dei giocatori: niente nomi, niente UUID, niente indirizzi, niente coordinate.
false lo disattiva solo per questo plugin. enabled: false in plugins/bStats/config.yml, il file condiviso da ogni plugin bStats su questo server, lo disattiva per tutti in una volta.
metrics1 chiaveenabledtrueDiagnostica del plugin stesso
debug1 chiavelog-sqlfalseScrivi ogni query SQL in console. Serve a noi, non a te.
Lingue
I testi che il plugin mostra ai giocatori, un file per lingua.
lang/
Testi e messaggi 2 file
lang/plugins/ShadowOptimizer/lang/ Note del file
Questo è l'UNICO tipo di file i cui valori sono scritti in una lingua. Tutto ciò che legge il plugin - chiavi di config, sezioni, comandi - è in inglese. Tutto ciò che legge un giocatore vive qui.
Formato MiniMessage. I placeholder si scrivono <like_this>. Una chiave che manca dalla tua copia di un file viene letta prima dalla stessa lingua dentro il plugin; una lingua che il plugin non include ripiega qui, chiave per chiave: una traduzione incompleta funziona lo stesso.
Un messaggio è una semplice stringa oppure una piccola mappa:
key: text: "<red>Text" channel: ACTION_BAR # CHAT | ACTION_BAR | TITLE | SUBTITLE | NONE sound: block.note_block.bass volume: 0.7 pitch: 0.8 cooldown: "2s" # per-player anti-spam
Le liste sono messaggi su più righe: la lore di un item della GUI, un blocco di aiuto.
IL PLACEHOLDER <label> Non scrivere mai il comando a mano. <label> viene sostituito a runtime con l'etichetta che il registrar di Paper ci ha effettivamente concesso: /lag e /sopt sono alias brevi e comodi, e quindi i primi che un altro plugin potrebbe aver già preso. All'avvio la console dice quale è stato concesso e quale è andato perso.
I NOMI DEI COMANDI IN QUESTI TESTI RESTANO IN INGLESE. Si traduce solo la descrizione attorno: una guida, un video o una riga incollata in un ticket deve funzionare su qualsiasi server, in qualunque lingua giri.
AGGIORNAMENTI: una nuova versione porta questo file ai nuovi testi per te. Le righe che hai riscritto restano tue; quelle che non hai mai toccato prendono la nuova formulazione. Il file precedente viene conservato in backup/<date>/.
Tutti i messaggi che il plugin mostra ai giocatori, un file per lingua. Le chiavi non sono elencate una per una: qui ci sono i file, quanti testi contengono e i segnaposto che usano.
| File | Lingua | Testi |
|---|---|---|
lang/en_US.yml riferimento | English | 255 |
lang/it_IT.yml | Italiano | 255 |
Segnaposto più usati
Il plugin li sostituisce con il valore giusto: vanno lasciati scritti così.
<prefix><label><count><n><page><pages><chunks><minutes><merged><state><millis><name><share><radius>
Gruppi di messaggi
prefix1common20command7health4status6diagnose29cleanup42limits12panic8stacking9spawners2history5gui105safe-drop5