Vai al contenuto
ShadowMC

Configurazione

ShadowOptimizer

Monitor dei TPS, diagnostica leggibile del lag, pulizia intelligente e stacking.

Gratuito v1.0.4

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.

Cosa c’è dentro

12 file · 140 impostazioni

Da dove partire: config.yml

Impostazioni

I file che decidono come si comporta il plugin. Si parte da qui.

config.yml

Impostazioni generali
117 impostazioni
plugins/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 modificarlo
config-version1
core1 chiave
server-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 chiavi
count-every15

Ogni 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-hours72

Quante 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 chiavi
background-scan-minutes5

Quanti 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-tick48

Quanti 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-chunks20000

Il 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.

entries25

Quante righe ha ogni classifica. 25 sono più che sufficienti per trovare un colpevole.

diagnostics.profiler3 chiavi

Il 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.

enabledtrue
sample-interval-ms100

Quanti 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 chiavi
enabledtrue
interval-minutes15

Quanti minuti tra una passata e l'altra.

broadcasttrue

Se 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-tick32

Quanti 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 chiavi
mergetrue

Unisci prima di rimuovere. È il passaggio che rende il plugin diverso da tutti gli altri: spegnilo e diventa un ClearLag.

removetrue

Rimuovi 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-limit600

Quanti 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 chiavi
removetrue

Rimuovi 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-hostilefalse

Limita 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-defaultsfalse

Metti 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 chiavi
removetrue

Frecce e simili che non hanno più un proprietario.

min-age-seconds60

Tetti 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 chiavi
enabledtrue
presetNORMAL

HIGH | NORMAL | MEDIUM | LOW, oppure il nome di un preset che scrivi qui sotto.

spawn-caps.presets1 chiave

Per 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 chiavi
hostile18
animal16
water14
ambient10
other18
spawn-caps
per-type

Un tipo di entità, il suo tetto, qualunque cosa dica il preset (-1 = nessuno).

ZOMBIE: 10

COW: 24

count-cache-ms1000

Per 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 chiavi
enabledtrue
max-entities300

-1 su qualsiasi voce significa "nessun limite".

max-mobs200
max-items200
max-hoppers64

Hopper.

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-slowdown4

Oltre il limite, ogni quanti trasferimenti ne passa uno.

count-cache-ms1000

Per 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-ms30000

Lo stesso, per gli hopper. Nessuno ne piazza quaranta al secondo.

compact-every-ms2000

Al 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-stafftrue

Se 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.

limits
worlds

Il 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.

limits
regions
public_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 chiavi
default-minutes5

Quanti minuti dura quando non lo specifichi.

stop-explosionstrue

Esplosioni a catena.

stop-redstonetrue

Redstone. È 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-spawntrue

Spawn 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 chiavi
stacking.entities11 chiavi
enabledtrue
max-size100

Fino 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.0

Entro 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-from2

Da 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-onlytrue

Un cucciolo non si unisce a uno stack di adulti.

same-name-onlytrue

Due 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-defaultsfalse

Metti 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 chiavi
enabledtrue
max-amount4096

Fino 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.0
show-counter-from2

Da 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 chiavi
per-tick24

Quanti 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-queued20000

Il 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-multiplier500

Il 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-experiencetrue

Se moltiplicare anche l'esperienza.

Raccolta diretta - ciò che un blocco droppa va nell'inventario, non a terra

direct-pickup5 chiavi

Ogni 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.

enabledfalse
worlds[ ]

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-toofalse

In 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 chiavi
enabledtrue

Attiva per tutti. Un giocatore che non la vuole la disattiva per sé con /safedrop off (ricordato in safe-drop-players.yml).

protect-damageabletrue

Tutto ciò che si consuma: attrezzi, armi, armature, archi, elytra.

protect-enchantedtrue

Tutto ciò che è incantato, anche quando non è un attrezzo. Un libro incantato vale quanto la spada su cui finirà.

protect-namedfalse

Tutto 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-seconds5

Quanto 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 chiavi
enabledtrue
base-batch4

Quanto è grande un lotto per uno spawner da solo.

max-batch16

Il tetto, anche con molti spawner raggruppati.

group-in-chunktrue

Tratta gli spawner di uno stesso chunk come uno solo.

È questo che trasforma sessanta spawner su due chunk in due eventi invece di sessanta.

nearby-cap64

Quanti 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-radius16

Entro 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 chiavi
storage.mysql7 chiavi
enabledfalse

false = 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.1
port3306
databaseshadowoptimizer
usernameroot
password""
parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"
storage
table-prefix"so_"

Prefisso delle tabelle.

fallback-to-localtrue

MySQL configurato ma irraggiungibile: con true il plugin lo dice in console e ripiega sul file locale, così il server parte lo stesso.

storage.pool5 chiavi
maximum-pool-size4

Piccolo apposta: questo plugin scrive una riga al minuto. Un pool di dieci connessioni per due insert è memoria buttata.

minimum-idle1
connection-timeout-ms10000
idle-timeout-ms600000
max-lifetime-ms1800000
storage.h21 chiave
auto-serverfalse

Permette 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 chiavi
default-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-localetrue

Segui 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 chiave
integrations.shadowcontrol2 chiavi
publish-healthtrue

Scrivi health.yml nella nostra cartella, così il pannello può mostrare lo stato di salute del server accanto agli aggiornamenti.

publish-seconds30

Quanti 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 chiave
enabledtrue

Diagnostica del plugin stesso

debug1 chiave
log-sqlfalse

Scrivi 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
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.

FileLinguaTesti
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

  • prefix 1
  • common 20
  • command 7
  • health 4
  • status 6
  • diagnose 29
  • cleanup 42
  • limits 12
  • panic 8
  • stacking 9
  • spawners 2
  • history 5
  • gui 105
  • safe-drop 5

Tutta la documentazione