Vai al contenuto
ShadowMC

Configurazione

ShadowBattlePass

Stagioni, cento livelli, missioni e sfide. Con l'editor delle ricompense dentro il gioco.

Premium v1.0.4

Dove sono i file

plugins/ShadowBattlePass/

Il plugin li crea al primo avvio e li aggiorna da solo alle nuove versioni, senza toccare le tue modifiche.

Applicare le modifiche

/bpa reload

Rilegge i file senza riavviare il server.

Cosa c’è dentro

33 file · 580 impostazioni

Da dove partire: config.yml

Impostazioni

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

config.yml

Impostazioni generali
103 impostazioni
plugins/ShadowBattlePass/config.yml
Note del file

Con un aggiornamento i tuoi file (questo, seasons/, quests/, lang/, menus/ e gli altri qui sotto) vengono portati alla nuova versione in automatico: ogni valore che hai cambiato o aggiunto resta, le nuove opzioni arrivano con i loro commenti, e ciò che hai cancellato resta cancellato. Le vecchie copie sono in backup/<date>/; se qualcosa richiede la tua attenzione troverai PORTING-<version>.txt nella cartella del plugin.

Un valore sbagliato non blocca niente: viene sostituito con quello di fabbrica e segnalato in console all'avvio, con il percorso e il valore atteso.

Dove stanno le cose:

config.yml        questo file: archiviazione, regole, notifiche, hook
seasons/*.yml     le stagioni: livelli, tracce, ricompense
quests/*.yml      le missioni, un file per gruppo (daily, weekly, ...)
rewards.yml       pacchetti di ricompense riutilizzabili
boosters.yml      moltiplicatori programmati (weekend, happy hour)
shop.yml          lo shop che paghi con le monete del pass
challenges.yml    le sfide di tutto il server
lang/*.yml        i messaggi
menus/*.yml       il layout di ogni schermata
config-version4
storage7 chiavi
storage.mysql7 chiavi
enabledfalse

false = database H2 locale dentro plugins/ShadowBattlePass/data/. Niente da installare: il plugin funziona nel momento in cui lo copi. Metti qui le tue credenziali e riavvia: il plugin crea da solo ogni tabella, e nel file locale non viene toccato niente.

host127.0.0.1
port3306
databaseshadowbattlepass
usernameroot
password""
parameters"useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8"
storage
table-prefix"bp_"

Prefisso delle tabelle. Se lo cambi, il plugin crea nuove tabelle e riparte da zero: utile per due server che condividono un database.

fallback-to-localtrue

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

flush-interval"30s"

Ogni quanto i progressi modificati arrivano al database. Allo spegnimento avviene sempre un salvataggio bloccante, qualunque cosa dica questo valore.

storage.pool5 chiavi
maximum-pool-size10
minimum-idle2
connection-timeout-ms10000
idle-timeout-ms600000
max-lifetime-ms1800000
storage.h21 chiave
auto-serverfalse

Permette a un altro processo - un pannello web, per esempio - di aprire lo stesso file H2 mentre il server è acceso. Serve di rado.

Più server su un solo database

Serve solo se hai una rete (lobby + survival + ...) che condivide un unico MySQL. I server si passano le novità attraverso il database: nessuna porta da aprire, niente da installare sul proxy.

Continua a leggere

Ciò che viaggia è un AVVISO, mai un valore: un messaggio dice "la stagione è cambiata", non "ora la stagione è season-2". Chi lo riceve va a rileggere la verità dal database, così due server che cambiano qualcosa nello stesso secondo convergono invece di sovrascriversi.

Il pass di un giocatore non ha bisogno di viaggiare: sei su un server alla volta, il pass si carica all'ingresso e si scrive all'uscita, e due server non hanno mai lo stesso giocatore.

storage.sync5 chiavi
modeAUTO

AUTO = attivo quando usi MySQL, spento sul database locale. ON | OFF per deciderlo tu.

primarytrue

IMPORTANTE: in una rete, ESATTAMENTE UN server può avere primary: true. È quello che avvia e chiude le stagioni e fa partire le sfide programmate. Gli altri leggono e mostrano.

server-idauto

Un nome per questo server. "auto" usa hostname + porta. Due server non devono mai avere lo stesso.

poll-interval"3s"

Ogni quanto leggere ciò che hanno fatto gli altri.

keep-messages"1h"

Per quanto tenere i messaggi già letti prima di cancellarli.

Messaggi e lingue

messages2 chiavi
default-locale"en_US"

La lingua usata quando quella del giocatore non è in lang/, e dalla console. Include en_US e it_IT: metti "it_IT" per un server italiano.

follow-client-localetrue

true = ogni giocatore vede i messaggi nella lingua del suo client. Può comunque sceglierne una con /bp lang.

Orario

Questo decide quando ruotano le missioni. Vale per tutti nello stesso istante: due giocatori online nello stesso giorno ricevono le stesse missioni giornaliere, e il reset non è "24 ore dopo il tuo primo accesso".

time3 chiavi
zone"system"

"system" usa il fuso orario del server. Oppure indicane uno, es. "Europe/Rome".

daily-reset"00:00"

A che ora cambiano le missioni giornaliere. Prima di quest'ora il giorno non è ancora cambiato, così chi gioca alle 3 di notte non perde un intero ciclo.

week-startsMONDAY

In che giorno inizia la settimana, per le missioni settimanali.

Dove e come si guadagna esperienza

worlds2 chiavi
only-in[ ]

Se questa lista NON è vuota, il pass funziona SOLO in questi mondi.

never-in[lobby]

Altrimenti funziona ovunque tranne qui.

earning3 chiavi
conditions[ ]

Requisiti che devono essere soddisfatti perché l'esperienza venga contata. Stessa sintassi delle condizioni delle missioni (vedi docs/07).

- "gamemode: survival, adventure"
- "not-world: creative"
daily-xp-cap0

Tetto giornaliero di esperienza per giocatore. 0 = nessun tetto. Non è una punizione: è ciò che impedisce a una farm afk di chiudere una stagione di novanta giorni in un pomeriggio.

earning.xp-sources7 chiavi

Esperienza passiva: quanto dà ogni singola azione, anche senza missioni attive. Lascia vuoto per un pass che avanza SOLO con le missioni, che è la scelta più comune e meglio bilanciata.

Per le azioni basate su una quantità (danno, soldi, distanza) il numero è per unità, con un tetto interno perché un colpo solo non possa produrre numeri assurdi.

Lista completa dei tipi: docs/05-OBIETTIVI.md

ORE_MINE1
MOB_KILL1
ITEM_FISH2
CROP_HARVEST1
ADVANCEMENT25
RAID_WIN100
BOSS_KILL250

Anti abuso

È ciò che fa sì che una missione "rompi 500 minerali" riguardi davvero lo scavo invece di diventare "piazza e rompi lo stesso blocco 500 volte".

anti-abuse6 chiavi
ignore-placed-blockstrue

Un blocco piazzato da un giocatore non conta quando viene rotto. La memoria vive nel chunk stesso, quindi sopravvive a un riavvio.

placed-blocks-per-chunk4096

Quanti blocchi piazzati ricordare per chunk. Oltre questo numero i più vecchi vengono dimenticati.

ignore-spawner-mobstrue

I mob usciti da uno spawner o da un uovo non contano per le missioni che chiedono di uccidere. Le singole missioni possono cambiare questa regola.

ignore-afktrue

Chi non muove il mouse da un po' non sta giocando: le sue azioni non contano finché non torna.

afk-after"5m"
max-events-per-second64

Tetto di eventi al secondo per giocatore. Non è un anticheat: è una rete di sicurezza contro le macchine che rompono migliaia di blocchi al secondo. 0 = nessun limite.

Riscossione delle ricompense

claiming5 chiavi
auto-claim-tiersfalse
true = le ricompense arrivano da sole appena sali di livello.
false = il giocatore clicca, che dà più soddisfazione ed è molto più comune.
auto-claim-questsfalse

Lo stesso per le missioni finite.

auto-claim-on-season-endtrue

Alla fine di una stagione tutto ciò che non è stato riscosso viene consegnato comunque. Lascialo attivo: nessuno dovrebbe perdere una ricompensa che si era guadagnato solo perché era offline.

allow-tier-dropfalse

Se abbassi la curva a metà stagione, true ricalcola verso il basso chi l'ha già superata. Di solito non è quello che vuoi.

mailboxtrue

Casella postale: un item che non entra nell'inventario non viene droppato e non sparisce, aspetta lì finché non c'è spazio. Se la disattivi, una ricompensa che non entra viene rifiutata.

Notifiche

La parte delicata di un battle pass. Troppo poco e i progressi sono invisibili; troppo e dopo un minuto la chat è illeggibile.

notifications8 chiavi
join-summarytrue

Un riepilogo in chat quando un giocatore entra.

notifications.xp2 chiavi
enabledtrue

L'esperienza guadagnata appare nella action bar, mai in chat.

every"1s"

I guadagni vengono sommati e mostrati al massimo una volta ogni:

notifications.boss-bar2 chiavi
enabledtrue

Una barra sotto il mirino mentre l'esperienza si muove.

ticks60

Per quanti tick resta visibile dopo l'ultimo guadagno.

notifications.bar3 chiavi
length20

I caratteri della barra di avanzamento, usati ovunque.

full"█"
empty"░"
notifications.tier3 chiavi
titletrue

Un titolo sullo schermo quando si sale di livello.

broadcast-every10

Annuncia a tutti in chat ogni N livelli. 0 = mai.

sound"entity.player.levelup 0.7 1.2"
notifications.quest4 chiavi
titletrue
sound"entity.experience_orb.pickup 0.8 1.4"
progresstrue

Avvisi di avanzamento durante una missione lunga.

progress-steps4

In quanti passi: 4 significa al 25%, 50%, 75%. 0 = mai.

notifications.challenge-bar2 chiavi
enabledtrue
format"<gradient:#B388FF:#7C4DFF><challenge></gradient> <white><progress>/<goal> <gray>(<time>)"
notifications.announce3 chiavi
season-starttrue
track-unlocktrue
quest-resettrue

Serie di accessi

Il modo più economico e più onesto per far tornare qualcuno domani.

streaks3 chiavi
enabledtrue
grace-days1

Quanti giorni puoi saltare senza perdere la serie. Perdere trenta giorni di fila per una disconnessione fa smettere di giocare le persone, non le fa giocare di più.

streaks.rewards5 chiavi

La tabella può avere buchi: chi arriva al giorno 12 riceve il premio del giorno 7, non niente.

1["coins: 10"]
3["coins: 25", "xp: 100"]
7
["coins: 75", "xp: 500", "message: <gradient:#FFD54F:#FF8F00>A whole week in a row!</gradient>"]+1
14["coins: 150", "xp: 1000"]
30
["coins: 500", "xp: 3000", "tier: 1", "broadcast: &6<player> has played 30 days in a row!"]+1

Recupero per chi resta indietro

Una stagione è divertente finché recuperare sembra possibile. Chi entra tardi, o torna dopo due settimane, guadagna più in fretta - fino a un tetto, e solo finché non ha raggiunto gli altri.

catch-up3 chiavi
enabledtrue
behind-tiers10

Quanti livelli sotto la media devi essere perché scatti.

max-multiplier2.0

Il massimo per cui può moltiplicare.

Pass di squadra condiviso

Su un server skyblock l'unità che conta è l'isola, non l'account. Con questo attivo ogni membro alimenta un'unica barra condivisa e ogni membro può riscuotere le ricompense dei livelli raggiunti - una volta ciascuno, così quattro giocatori non trasformano un livello in quattro copie dello stesso premio.

Continua a leggere

Richiede ShadowSkyBlock. Senza, la funzione semplicemente non si attiva mai.

team3 chiavi
enabledfalse
share0.25

Quanto di ciò che guadagna un membro arriva alla barra condivisa. 0.25 = un quarto.

track"free"

Quale traccia della stagione contiene i premi di squadra.

Regalare il pass

Comprare una traccia per un amico. È la funzione più richiesta di qualsiasi battle pass e quella che nessuno implementa: al server non costa nulla - i soldi escono dall'economia in ogni caso - e trasforma la traccia premium in qualcosa che puoi regalare per un compleanno, il che vende molte più copie di qualsiasi sconto.

gifting3 chiavi
enabledtrue
markup0.0

Sovrapprezzo, come frazione. 0 = nessuno, 0.1 = dieci per cento in più. Zero di base: i regali vanno incoraggiati, non tassati.

announcetrue

Annuncia il regalo agli altri giocatori.

Classifica

leaderboard3 chiavi
size100

Quante posizioni tenere in memoria.

refresh"2m"

Ogni quanto viene ricalcolata.

hologram-size10

Quante posizioni mostra la classifica fluttuante. Piazzala con /bpa hologram place <board>, stando dove la vuoi. Richiede ShadowEssentials per gli ologrammi.

Schermate

gui2 chiavi
input-timeout"60s"

Quanto tempo ha un amministratore per rispondere a una domanda che l'editor fa in chat prima che venga annullata.

refresh-ticks20

Pulizia

housekeeping3 chiavi
history-days60

Per quanti giorni tenere lo storico delle ricompense date. 0 = per sempre.

mailbox-days30

Per quanti giorni tenere i pacchi già consegnati.

quest-days30

Per quanti giorni tenere i progressi dei cicli chiusi e riscossi.

Integrazioni

Tutti opzionali. Un plugin mancante degrada una funzione e non blocca mai un avvio.

integrations3 chiavi
suitetrue

Ci presentiamo a ShadowEssentials, così /se suite ci elenca.

integrations.permissions3 chiavi
grant-command""

Il comando usato per dare un permesso come ricompensa. Lascia vuoto per far scegliere al plugin: riconosce ShadowPermissions, LuckPerms, PermissionsEx e GroupManager. Placeholder: <player> <node> <duration>

grant-timed-command""
revoke-command""
integrations.crates1 chiave
give-command""

Il comando usato per dare chiavi delle crate come ricompensa. Vuoto = riconosce ShadowCrazyChest, CrazyCrates, ExcellentCrates. Placeholder: <player> <crate> <amount>

Diagnostica

debug1 chiave
log-sqlfalse

Scrive ogni query in console. Solo per dare la caccia a un problema: su un server vero riempie il log in pochi minuti.

bStats (statistiche d'uso anonime, https://bStats.org)

Cosa viene inviato, ogni 30 minuti: un id casuale del server (serverUuid, non derivato da nulla), la versione del plugin, le versioni di Minecraft/Paper e di Java, il sistema operativo e il numero di core, la modalità online, quanti giocatori sono online (solo un numero) e il tipo di licenza (free/premium/creator). NESSUN dato dei giocatori: niente nomi, niente UUID, niente indirizzi, niente progressi. Non viene inviato nulla mentre il plugin aspetta una licenza.

Continua a leggere

false disattiva solo questo plugin. enabled: false in plugins/bStats/config.yml disattiva in un colpo tutti i plugin bStats sul server.

metrics1 chiave
enabledtrue

La licenza

Senza chiave il plugin gira nell'edizione free. Non si spegne mai da solo e non cancella mai niente: ciò che supera i limiti non viene caricato ma resta su disco, intatto, e torna quando arriva una chiave.

Continua a leggere

La chiave NON va qui. Sta in license.yml, un file separato apposta: una richiesta di supporto che dice "mandami la tua config" non deve arrivare con dentro la licenza di qualcuno. Il campo qui sotto esiste solo per chi genera la config da un sistema di deploy.

license3 chiavi

LA CHIAVE VIVE IN license.yml (stessa cartella di questo file), oppure nel file centrale plugins/ShadowControl/licenses.yml per tutta la suite. La 'key' qui sotto è solo un ripiego per i sistemi di deploy che generano config.yml: lasciala vuota.

La chiave NON sta qui: sta in license.yml, in questa cartella, creato al primo avvio (oppure in plugins/ShadowControl/licenses.yml per tutta la suite). Lasciato vuoto: usa /bpa license activate <key>, oppure license.yml.

activation-url'https://shadow-licences.riccardobotins.workers.dev'

L'indirizzo BASE del servizio di attivazione. Il plugin aggiunge da solo /claim e /check. Vuoto significa nessuna attivazione automatica: le chiavi si incollano a mano e tutto il resto continua a funzionare.

grace-days7

Quanti giorni di tolleranza quando una licenza scade o gli indirizzi non corrispondono. Sette, perché un rinnovo che arriva il lunedì mattina non deve costare un weekend a nessuno, e perché un indirizzo che non corrisponde è molto più spesso un NAT che un ladro.

resolve-public-iptrue

Chiedi al servizio licenze (activation-url + /ip) qual è l'indirizzo pubblico di questo server: risponde con l'indirizzo che vede, e del server non viene inviato niente. Serve solo per far corrispondere il vincolo di una licenza dietro NAT. Disattivalo se preferisci che il plugin non parli con nessuno. Solo con una licenza installata: un server senza chiave non chiede niente a nessuno. false = non chiedere mai.

boosters.yml

I potenziamenti a tempo
21 impostazioni
plugins/ShadowBattlePass/boosters.yml
Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/boosters.yml

Copiala al posto di questo file per usarla.

I moltiplicatori di esperienza.

Arrivano da quattro posti diversi e finiscono tutti in un unico numero:

1. PERMESSO      shadowbattlepass.booster.150  ->  x1.5
   Il numero è una percentuale: 200 la raddoppia.
2. PROGRAMMATI   le finestre definite qui sotto (weekend, happy hour)
3. PERSONALI     comprati nello shop o dati come ricompensa
4. GLOBALI       avviati da un amministratore per tutto il server

Come si combinano è una scelta, non un caso: vedi "stacking".

config-version2
stackingfalse

false = vince il migliore. true = si moltiplicano tra loro.

Lascialo su false a meno che tu non sappia esattamente cosa stai facendo: due booster che si cumulano sono il modo più rapido per ritrovarti una stagione finita in un solo weekend.

max-multiplier5.0

Il tetto massimo invalicabile, qualunque cosa finiscano per dire le regole qui sopra.

Finestre programmate

Ognuna si attiva da sola nei giorni e nelle ore indicati qui. Togli "days" per farla valere tutti i giorni. Togli "from" e "to" per farla valere tutto il giorno. Aggiungi "permission" per limitarla a un gruppo.

schedules4 chiavi
schedules.weekend4 chiavi
enabledtrue
display"&6Weekend x1.5"
multiplier1.5
days[SATURDAY, SUNDAY]
schedules.happy-hour5 chiavi
enabledtrue
display"&bHappy hour x2"
multiplier2.0
from"20:00"
to"22:00"
schedules.night-shift5 chiavi

Una finestra che scavalca la mezzanotte funziona senza problemi: 22:00 -> 02:00.

enabledfalse
display"&9Night shift x1.25"
multiplier1.25
from"22:00"
to"02:00"
schedules.vip4 chiavi

Solo per chi ha un permesso: i primi giorni di un rank, per esempio.

enabledfalse
display"&dVIP bonus"
multiplier1.25
permission"shadowbattlepass.booster.vip"

challenges.yml

Le sfide
52 impostazioni
plugins/ShadowBattlePass/challenges.yml
Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/challenges.yml

Per usarla, copiala al posto di questo file.

Qualcosa che tutto il server fa insieme.

"Uccidete cinquantamila zombie entro domenica sera." Una barra, tutti a spingerla, un premio quando si riempie. È questo che trasforma un battle pass da una lista personale di cose da fare in qualcosa di cui si parla in chat - e nessun altro plugin di questo tipo ce l'ha.

Il contributo di ognuno viene registrato, così il premio può essere giusto: chi ha aiutato riceve qualcosa, chi ha aiutato di più riceve di più, e chi si è presentato all'ultimo minuto non si porta a casa lo stesso premio di chi ha tirato la carretta.

Gli obiettivi usano gli stessi tipi delle quest: docs/05-OBIETTIVI.md

config-version2
enabledtrue
challenges3 chiavi

Sabato sera, due ore, tutti a uccidere non-morti

challenges.purge13 chiavi
enabledtrue
display"<gradient:#EF5350:#B71C1C><bold>The Purge</bold></gradient>"
description
["&7The whole server against the undead.", "&7Two hours to take out ten thousand."]+1
iconZOMBIE_HEAD
challenges.purge.objective3 chiavi
typeMOB_KILL
target
[ZOMBIE, SKELETON, HUSK, DROWNED, STRAY, ZOMBIE_VILLAGER]+3
no-spawner-mobstrue

I mob da spawner non contano: sarebbe una scorciatoia, non una battaglia.

challenges.purge
goal10000
duration2h
auto-starttrue

Quando parte da sola. Togli "auto-start" per avviarla solo a mano, con /bpa challenge start purge.

periodWEEKLY
days[SATURDAY]
at"21:00"
xp-per-contribution2

Esperienza data a ogni contributo, mentre la sfida è in corso.

challenges.purge.rewards4 chiavi
min-contribution25

Quanto devi aver fatto per contare come partecipante.

participant["coins: 100", "money: 10000"]
challenges.purge.rewards.top3 chiavi

Il primo posto prende il premio "1", secondo e terzo prendono il "3", dal quarto al decimo prendono il "10".

1
["bundle: epic-crate", "broadcast: &6<player> led the Purge!"]+1
3["bundle: rare-crate"]
10["bundle: common-crate"]
challenges.purge.rewards
everyone["booster: 1.5 1h"]

Dato a tutti quelli online quando la sfida viene vinta, anche a chi non ha mosso un dito. Fa sentire l'evento a tutti.

Domenica pomeriggio, tutti a scavare

challenges.big-dig13 chiavi
enabledtrue
display"<gradient:#4FC3F7:#0288D1><bold>The Great Dig</bold></gradient>"
description
["&7A hundred thousand blocks of stone.", "&7Sounds like a lot. It is not, if everybody pitches in."]+1
iconDIAMOND_PICKAXE
challenges.big-dig.objective3 chiavi
typeBLOCK_BREAK
target
[STONE, DEEPSLATE, ANDESITE, DIORITE, GRANITE, TUFF]+3
no-placed-blockstrue
challenges.big-dig
goal100000
duration3h
auto-starttrue
periodWEEKLY
days[SUNDAY]
at"16:00"
xp-per-contribution1
challenges.big-dig.rewards3 chiavi
min-contribution200
participant["coins: 75"]
challenges.big-dig.rewards.top2 chiavi
1["bundle: epic-crate"]
5["bundle: rare-crate"]

Solo a mano: quella da tirare fuori per un evento

challenges.big-catch10 chiavi
enabledtrue
display"<gradient:#80DEEA:#00838F><bold>The Big Catch</bold></gradient>"
description["&7A thousand fish. Bring patience."]
iconFISHING_ROD
challenges.big-catch.objective1 chiave
typeITEM_FISH
challenges.big-catch
goal1000
duration1h
auto-startfalse
xp-per-contribution5
challenges.big-catch.rewards3 chiavi
min-contribution5
participant["coins: 150"]
challenges.big-catch.rewards.top1 chiave
1["item: TRIDENT 1", "coins: 500"]

rewards.yml

Le ricompense
15 impostazioni
plugins/ShadowBattlePass/rewards.yml
Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/rewards.yml

Copiala al posto di questo file per usarla.

Pacchetti di ricompense con nome.

Scrivi un pacchetto qui una volta, poi richiamalo da dove vuoi - un livello della stagione, una missione, una voce dello shop, una sfida - con una riga:

- "bundle: epic-crate"

È proprio questo il senso: se decidi che la crate epica deve dare il doppio dei soldi, lo cambi in un posto solo e cambia in tutti i venti livelli che la usano, senza aprire un solo file di stagione.

Un pacchetto può contenere qualsiasi cosa, pacchetti compresi.

La sintassi completa delle ricompense è in docs/06-RICOMPENSE.md.

config-version2
bundles14 chiavi

Crate

bundles
common-crate
["coins: 25", "item: EXPERIENCE_BOTTLE 8", "money: 2500"]+1
rare-crate
["coins: 75", "item: DIAMOND 3", "money: 10000", "sound: entity.player.levelup 0.8 1.4"]+1
epic-crate
["coins: 200", "money: 50000", { type: RANDOM, display: "&dEpic item", picks: 1, options: […] }, "firework: B388FF"]+2

Momenti chiave

bundles
welcome
["coins: 25", "item: BREAD 16", "message: &7A little help to get you started."]+1
season-end
["coins: 1000", "money: 100000", "booster: 2.0 24h", "item: TOTEM_OF_UNDYING 3", "firework: FFD54F"]+3

Mattoncini riutilizzabili

bundles
snack
["item: COOKED_BEEF 16", "item: GOLDEN_CARROT 8"]+1
starter-gear[{ type: ITEM, item: {…} }, "item: TORCH 64"]

Esempio con un item di un altro plugin. La riga funziona solo se quel plugin è presente; se manca, il pacchetto lo segnala in console e va avanti con il resto invece di rompersi.

item-custom:
  - "item: oraxen:mythril_sword"
  - "item: mmoitems:SWORD:EXCALIBUR"

Kit distribuiti lungo la stagione

Solo item vanilla: funzionano su un server appena installato. Incantati, con un nome, e indistruttibili dove serve, così una ricompensa di livello 15 non è un piccone di ferro che chiunque può craftare.

bundles
iron-kit
[{ type: ITEM, item: {…} }, { type: ITEM, item: {…} }, "item: IRON_CHESTPLATE 1", "item: COOKED_BEEF 16"]+3
diamond-kit
[{ type: ITEM, item: {…} }, { type: ITEM, item: {…} }, { type: ITEM, item: {…} }, "item: GOLDEN_APPLE 4"]+3
netherite-kit
[{ type: ITEM, item: {…} }, { type: ITEM, item: {…} }, "item: NETHERITE_INGOT 2", "item: ENCHANTED_GOLDEN_APPLE 1"]+3
builder-kit
["item: STONE_BRICKS 128", "item: OAK_PLANKS 128", "item: GLASS 64", "item: LANTERN 16", "item: SCAFFOLDING 64"]+4
farmer-kit
["item: BONE_MEAL 64", "item: WHEAT_SEEDS 32", "item: CARROT 16", "item: POTATO 16", { type: ITEM, item: {…} }, "item: WATER_BUCKET 2"]+4
mob-kit
[{ type: ITEM, item: {…} }, "item: ARROW 1", "item: SHIELD 1", "item: COOKED_PORKCHOP 16"]+2
potion-kit
["effect: speed 1200 2", "item: GOLDEN_CARROT 16", "item: TOTEM_OF_UNDYING 1", "item: ENDER_PEARL 8", "item: EXPERIENCE_BOTTLE 16"]+4

shop.yml

Il negozio
24 impostazioni
plugins/ShadowBattlePass/shop.yml
Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/shop.yml

Copiala al posto di questo file per usarla.

Cosa si compra con le monete del pass. Le monete arrivano dai livelli e dalle missioni; qui si spendono. Tre scaffali, e ogni scaffale pieno dal primo giorno: uno shop con una sola cosa dentro insegna ai giocatori che le monete non valgono niente, e da lì in poi nessuna missione vale la pena.

Ogni voce:

category:        uno degli id sotto "categories" qui sotto
display / description / icon
price:           monete, soldi (serve un plugin di economia), o livelli
limit-per-cycle + cycle (DAILY, WEEKLY, MONTHLY, SEASON): quante
                 volte per giocatore per ciclo; se omesso = nessun limite
limit-per-player: quante volte in totale
conditions:      stessa sintassi delle missioni ("tier: >= 30")
rewards:         stessa forma breve delle stagioni e delle missioni
featured:        true lo fa brillare
config-version3
enabledtrue
currency-name"Pass Coins"
categories3 chiavi
categories.utili4 chiavi
display"<green><bold>Useful</bold>"
description["&7Things you actually need."]
iconCHEST
order0
categories.progressi4 chiavi
display"<gold><bold>Progress</bold>"
description["&7To move up faster."]
iconLADDER
order1
categories.cosmetici4 chiavi
display"<light_purple><bold>Cosmetics</bold>"
description["&7Just for showing off."]
iconFIREWORK_ROCKET
order2
entries22 chiavi

Utili

entries.reroll9 chiavi
enabledtrue
categoryutili
display"&eSwap a quest"
description
["&7A daily quest you do not fancy", "&7is replaced with another one."]+1
iconCLOCK
entries.reroll.price1 chiave
coins50
entries.reroll
limit-per-cycle2
cycleDAILY
rewards["reroll: 1"]
Ancora 21 voci con la stessa forma di reroll: snack, golden-apples, ender-pearls, common-crate, rare-crate, epic-crate, gear, farmer-kit, totem, shulker, booster-2h, booster-6h, xp-pack, tier-skip, vanilla-xp, fireworks, fireworks-show, aura, veteran-title, champion-title, player-head

vouchers.yml

I buoni
12 impostazioni
plugins/ShadowBattlePass/vouchers.yml
Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/vouchers.yml

Copiala al posto di questo file per usarla.

Voucher: ricompense con un corpo.

Un voucher è un item che, cliccato col tasto destro, fa qualcosa al pass: sblocca una traccia, aggiunge esperienza, consegna un pacchetto.

È ciò di cui uno store ha davvero bisogno: un prodotto che si può regalare, tenere, scambiare e usare quando il compratore ne ha voglia, invece di un comando che scatta al momento del pagamento anche se in quel momento il giocatore non è online.

L'item porta con sé SOLO l'id del voucher, mai il suo contenuto. È la scelta che lo rende sicuro: manomettere l'item non può trasformare un voucher di carbone in uno di diamanti, e cambiare idea significa cambiare un file invece di inseguire ogni copia già in circolazione.

Per consegnarne uno:

/bpa voucher give <player> <id> [amount]
config-version2
vouchers6 chiavi

Il pass premium, sotto forma di item

Questo è il voucher che vende uno store.

vouchers.premium10 chiavi
enabledtrue
display"<gradient:#FFD54F:#FF8F00><bold>Premium Pass</bold></gradient>"
description
["&7Unlocks the premium track of the season", "&7and hands you everything you missed, right away."]+1
vouchers.premium.item2 chiavi
materialPAPER
glowtrue

item-model: "shadow:voucher_premium"

vouchers.premium
unlock-trackpremium

Cosa fa.

retroactivetrue

Consegna anche gli arretrati dei livelli già raggiunti.

season""

Valido solo per la stagione in cui è stato creato. Lascialo vuoto per renderlo valido per qualsiasi stagione: un premium comprato per la stagione 1 non dovrebbe sbloccare di nascosto la stagione 4 due anni dopo, ed è così che lo dici.

Il comando "/bpa voucher give" ci scrive dentro la stagione attiva al momento della creazione, quindi di solito qui non serve niente.

consumetrue
broadcasttrue
stack-size1
Ancora 5 voci con la stessa forma di premium: deluxe, experience, coins, booster, veteran-crate

seasons/season-1.yml

Stagione: season-1
87 impostazioni
plugins/ShadowBattlePass/seasons/season-1.yml
Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/seasons/season-1.yml

Copiala al posto di questo file per usarla.

UNA STAGIONE = UN FILE. Copia questo file, cambiagli nome e id, e hai la stagione 2. Il plugin le trova da solo: non c'è niente da registrare da nessuna parte.

Tre idee tengono corto questo file anche con cento tier:

1. UNA CURVA, NON UNA TABELLA
   Il costo di ogni tier viene da una formula. Solo i tier che
   rompono lo schema si scrivono a mano, sotto "overrides".
2. SCHEMI, NON RIPETIZIONI
   Una ricompensa può essere legata al tier 7, all'intervallo 1-10, a "*5"
   (ogni quinto tier) o a "default" (ogni tier che nessun altro ha preso).
   Il numero esatto vince sempre sullo schema, così puoi scrivere prima la
   regola e l'eccezione dopo.
3. TUTTE LE TRACCE CHE VUOI
   Free e premium sono solo le due che trovi qui. Puoi aggiungerne altre:
   ognuna ha il suo permesso, il suo prezzo e le sue ricompense
   a ogni tier.
config-version2
season15 chiavi
idseason-1
display"<gradient:#FFD54F:#FF8F00><bold>Season 1 - The Lost Lands</bold></gradient>"
description
["&7Ninety days of exploring, digging and fighting.", "&7A hundred tiers, three tracks, rewards that last.", "&7A hundred and twenty-nine quests in rotation, and two stories."]+2
season.icon2 chiavi
materialNETHER_STAR
glowtrue
season
enabledtrue

Quando si svolge

Puoi indicare una data di inizio e una di fine, o solo una durata. Senza nessuna delle due, la stagione resta attiva finché non ne avvii un'altra a mano con /bpa season start.

season
duration90d
start: "2026-09-01 00:00"
end:   "2026-11-30 23:59"
auto-start-nextfalse

Quando finisce passa da sola al file della stagione successiva.

Continua a leggere

LA STAGIONE DUE, quando ne vuoi una: copia questo file in seasons/season-2.yml, cambia "id" in season-2 e il display di conseguenza, e imposta le due righe qui sotto a true / season-2. Non c'è nient'altro da registrare, e nel database non c'è niente da svuotare: le righe dei progressi tengono l'id con cui sono state scritte, quindi la stagione 1 resta leggibile per sempre.

Finché quel file non esiste, lasciale come sono. Una stagione che punta a un file che non c'è semplicemente va avanti, ma la console lo segnala ogni volta che controlla, e quel rumore nasconde gli avvisi veri.

next: season-2

Le tracce

season.tracks3 chiavi
season.tracks.free5 chiavi
display"<green><bold>Free</bold>"
description["&7For everyone, always."]
iconLIME_DYE
defaulttrue
order0
season.tracks.premium6 chiavi
display"<gold><bold>Premium</bold>"
description
["&7The main track of the season.", "<gray>Unlock it and you get <white>right away</white> everything", "&7you had already earned."]+2
iconGOLD_INGOT
order1
permission"shadowbattlepass.premium"

Chi ha questo permesso possiede la traccia: questo è il nodo da dare dal tuo store (Tebex, Craftingstore, ...), da un rank, o con /bpa unlock. Non c'è un acquisto in gioco, apposta: chi riceve la traccia premium lo decide il fondatore, non un cartellino del prezzo.

unlock-retroactivetrue

Sbloccarla a metà stagione consegna tutti gli arretrati in un colpo. È ciò che un giocatore si aspetta, ed è ciò che tutti gli altri plugin sbagliano.

season.tracks.deluxe6 chiavi
display"<light_purple><bold>Deluxe</bold>"
description["&7A third row, for those who want it all."]
iconAMETHYST_SHARD
order2
permission"shadowbattlepass.deluxe"
unlock-retroactivetrue

I livelli

I CONTI, così se cambi qualcosa sai cosa hai cambiato. Ogni numero qui sotto è quello che producono davvero i file in quests/.

Continua a leggere

QUANTO COSTA LA SCALA

livello   1     1.000          cumulativo       1.000
livello  10     1.900                          14.500
livello  25     3.400                          55.000
livello  50     8.000  (override)             174.600
livello  75     8.400                         354.600
livello 100    25.000  (override)             611.200

611.200 di esperienza in novanta giorni fanno 6.791 al giorno.

QUANTO RENDONO LE MISSIONI, SE LE COMPLETI

giornaliere  237.449     2.638 al giorno   tre su trentanove, più
                                           gli 800 per averle finite tutte e tre
settimanali  251.573     2.795 al giorno   quattro delle nove di quella settimana
mensili      127.149     1.413 al giorno   due su quindici
premium       98.190     1.091 al giorno   due su ventiquattro, riservate
stagionali   335.000     3.722 al giorno   quindici, senza reset
catene       166.000     1.844 al giorno   undici capitoli, uno alla volta

DOVE ARRIVA UN GIOCATORE

solo le giornaliere                    livello  59    non finisce
giornaliere + settimanali              livello  89    non finisce
giornaliere + settimanali + mensili    livello 100    al giorno 89 su 90
lo stesso, con il premium              livello 100    al giorno 77
tutto, free                            livello 100    al giorno 49
tutto, premium                         livello 100    al giorno 45

LA RIGA CHE CONTA è la terza. Un giocatore che fa le sue tre giornaliere, le sue quattro settimanali e le sue due mensili, e nient'altro, arriva al centesimo livello il penultimo giorno della stagione. È questa la promessa: presentati, fai la lista, finisci. Le missioni stagionali e le catene non sono obbligatorie - sono il margine per saltare due settimane e farcela lo stesso.

Chi completa davvero tutto finisce intorno al giorno cinquanta e passa il resto della stagione nei livelli infiniti qui sotto, che servono proprio a questo.

Nessuna delle due cifre conta i booster di boosters.yml - weekend x1.5 e happy hour x2 valgono circa un terzo in più per chi gioca la sera - né il bonus di recupero, che aiuta solo chi è indietro. Entrambi sono margine, apposta: una stagione che ha bisogno dei booster per poter essere finita è una stagione che non finisce nessuno.

Che il premium arrivi prima invece di guadagnare di più per livello è voluto: chi paga dovrebbe finire con un paio di settimane di anticipo, non a metà stagione con quarantacinque giorni senza più niente da fare.

Alzare "increment" sposta più in là il traguardo: ogni +10 sono 49.500 di esperienza in più, circa sette giorni al ritmo normale.

season.tiers6 chiavi
count100
season.tiers.curve5 chiavi
typeLINEAR
LINEAR      = base + increment * (tier - 1)
EXPONENTIAL = base * multiplier ^ (tier - 1)
FLAT        = sempre base
base1000
increment100
multiplier1.05
max15000

Tetto per il costo di un singolo livello. 0 = nessuno.

season.tiers.overrides2 chiavi

I livelli che devono costare qualcosa di diverso da ciò che dice la formula.

508000
10025000
season.tiers
milestone-every10

Quanti livelli tra un segno di traguardo e l'altro nella GUI. 0 = mai.

milestones[1, 25, 75]

Traguardi extra, oltre a quelli automatici.

season.tiers.icons19 chiavi

Icona personalizzata per singoli livelli. Accetta la stessa forma completa delle ricompense: materiale, texture della testa, modello.

Ogni livello scritto a mano qui sotto ha la sua, così scorrendo la scala si vede dov'è il prossimo premio vero invece di cento pannelli identici.

season.tiers.icons.101 chiave
materialIRON_PICKAXE
Ancora 18 voci con la stessa forma di 10: 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100

Oltre l'ultimo livello

Chi finisce la stagione continua a guadagnare: ogni "xp" qui sotto vale un prestigio, con la sua ricompensa. Così la cima della classifica ha ancora un motivo per giocare a novembre.

season.infinite3 chiavi
enabledtrue
xp20000
rewards
["coins: 250", "money: 10000", "broadcast: &d<player> went past the top tier again!"]+1

Quali gruppi di missioni usa questa stagione

Vuoto = ogni gruppo in quests/. Elencandoli, una stagione a tema può usare solo i propri.

season
quest-pools
[daily, weekly, monthly, seasonal, chains, premium]+3

Solo i giocatori che hanno sbloccato il premium vedono questo gruppo: la condizione sta dentro quests/premium.yml, non qui.

join-rewards
["coins: 25", "message: <gradient:#FFD54F:#FF8F00>Welcome to Season 1!</gradient>"]+1

Regalo di benvenuto la prima volta che si apre il pass.

completion-rewards
["bundle: season-end", "broadcast: <gradient:#FFD54F:#FF8F00><player> completed Season 1!</gradient>"]+1

Ricompensa per aver raggiunto l'ultimo livello.

season.catch-up2 chiavi

Bonus per i giocatori che restano indietro. I valori generali stanno in config.yml; qui puoi alzare o abbassare il tetto solo per questa stagione.

enabledtrue
max-multiplier2.0

Le ricompense

Chiave = livello, intervallo, "*n" o "default". Dentro, una lista per traccia.

Continua a leggere

Forma breve, una riga:

- "money: 5000"          - "coins: 100"        - "xp: 250"
- "item: DIAMOND 3"      - "tier: 1"           - "reroll: 1"
- "crate: vote 2"        - "booster: 1.5 2h"   - "permission: vip 30d"
- "command: fly <player> 10m"
- "bundle: bundle-name"        (definito in rewards.yml)
- "broadcast: &6..."       - "firework: FFD54F"

Forma lunga, per icone, condizioni, casualità e scelte: vedi il livello 50 qui sotto e docs/06-RICOMPENSE.md.

Questa tabella è già completa: ogni livello dà qualcosa a ogni traccia, dal primo al centesimo. "common-crate", "rare-crate" ed "epic-crate" sono pacchetti definiti in rewards.yml con contenuto vanilla, e così i kit: funzionano su un server appena installato. Con un vero plugin di crate, "bundle: rare-crate" può diventare "crate: rare 1".

COME È COSTRUITA

una base           "default", così nessun livello è mai un pannello vuoto
cinque fasce       1-10, 11-25, 26-50, 51-75, 76-99: i soldi crescono con
                   il numero, così vale la pena arrivare all'ottantesimo livello
due schemi         "*5" una crate, "*10" qualcosa di serio
diciannove livelli scritti a mano, uno ogni cinque da dieci a
                   cento: sono quelli con un nome, un'icona tutta
                   loro e qualcosa che un giocatore ricorda - i kit
                   al 10 e al 15, i cosmetici al 20, 30, 55 e 80, le
                   scelte al 50 e all'85, lo stoccaggio al 65, e la fine

COSA SIGNIFICANO I PREZZI

I soldi qui sono nella valuta di ShadowEconomy, e sono prezzati rispetto a quello shop, non inventati. In shop.yml un diamante si vende a 10 e costa 1.000 per ricomprarlo; un lingotto di netherite costa 12.140, un blocco di netherite 109.260. Quindi:

money: 2500      due diamanti e mezzo dallo scaffale
money: 25000     due lingotti di netherite
money: 400000    tre blocchi di netherite e mezzo

Su cento livelli, pacchetti compresi, la scala consegna:

free         554.600  e   6.957 monete del pass
premium    1.813.000  e  12.195
deluxe     2.795.000  e  17.325

Il riferimento con cui confrontarli è in quests/weekly.yml: "guadagna centomila in una settimana" lì è classificata HARD, quindi il gioco onesto vale circa quattordicimila al giorno. La scala free aggiunge circa seimila al giorno in più - un bonus vero che non sostituisce il giocare. Quelle a pagamento valgono volutamente parecchie volte tanto, perché è quella la cosa che si vende.

SE PENSI CHE SIA TROPPO per la tua economia, non ripassare questa tabella livello per livello. Le missioni premium ne sono la metà più grossa: quests/premium.yml consegna due commissioni al giorno da dieci a diciotto mila ciascuna, cioè circa due milioni e mezzo in una stagione. Dimezzare le righe "money:" in quel solo file è l'unico cambiamento che sposta davvero l'ago, e lascia la scala - la parte che i giocatori guardano davvero - esattamente com'è.

Le monete del pass sono una valuta chiusa: arrivano da qui e dalle missioni e non vanno da nessuna parte se non in shop.yml, dove quelle di una stagione comprano più o meno quello che dovrebbero. Niente su quegli scaffali si può comprare con una carta di credito, ed è questo che rende sicuro tutto il resto.

season.rewards27 chiavi
season.rewards.default3 chiavi

Ogni livello che non compare più sotto dà almeno questo.

Ci sono tutte e tre le tracce, e questa è la riga più importante del file. Un livello in cui la traccia a pagamento non dà niente è uno slot grigio accanto a uno pieno: il giocatore che ha pagato lo legge come "mi hanno fregato", e non ha tutti i torti. Qui ogni livello dà qualcosa a tutti, e le fasce e i traguardi qui sotto ci aggiungono sopra il resto.

free["coins: 5", "money: 250"]
premium
["coins: 12", "money: 1000", "item: EXPERIENCE_BOTTLE 4"]+1
deluxe
["coins: 20", "money: 2000", "item: EXPERIENCE_BOTTLE 8"]+1
season.rewards.1-103 chiavi

I primi dieci sono generosi apposta: è lì che si decide se qualcuno va avanti o molla.

free["coins: 10", "money: 500", "item: BREAD 8"]
premium
["coins: 25", "money: 2000", "item: COOKED_BEEF 16"]+1
deluxe
["coins: 40", "money: 4000", "item: GOLDEN_APPLE 2", "item: EXPERIENCE_BOTTLE 8"]+2
season.rewards.11-253 chiavi

Fasce: i soldi crescono con il livello, così vale la pena arrivare all'ottantesimo livello e non si tratta solo di altre cinque monete.

free["coins: 6", "money: 400"]
premium
["coins: 15", "money: 1500", "item: EXPERIENCE_BOTTLE 6"]+1
deluxe
["coins: 25", "money: 3000", "item: EXPERIENCE_BOTTLE 12"]+1
Ancora 13 voci con la stessa forma di default: 26-50, 51-75, 76-99, 15, 25, 35, 40, 55, 60, 70, 75, 80, 90
season.rewards.*53 chiavi

Ogni quinto livello, una crate. Attenzione, questa è la trappola più facile di tutto il file: una chiave qui SOSTITUISCE il default e le fasce, non si aggiunge a loro. Ogni voce deve quindi essere scritta per intero, altrimenti il livello 5 finisce per valere meno del livello 4 e il giocatore se ne accorge subito.

free
["coins: 10", "money: 600", "bundle: common-crate"]+1
premium
["coins: 25", "money: 2500", "bundle: common-crate", "bundle: snack"]+2
deluxe
["coins: 40", "money: 5000", "bundle: rare-crate", "bundle: snack", "booster: 1.25 30m"]+3
season.rewards.*103 chiavi

Ogni decimo, qualcosa di serio.

free
["coins: 50", "money: 1500", "item: DIAMOND 2", "bundle: common-crate"]+1
premium
["coins: 120", "money: 10000", "bundle: rare-crate", "booster: 1.5 1h"]+2
deluxe
["coins: 200", "money: 20000", "bundle: rare-crate", "bundle: potion-kit", "booster: 1.5 2h"]+3

Eccezioni: essendo numeri esatti, battono gli schemi qui sopra. Da qui al centesimo ce n'è una ogni cinque.

season.rewards.103 chiavi

Il primo numero tondo. Dopo dieci livelli, un giocatore decide se questo pass vale i prossimi novanta: questa è la risposta. Un attrezzo, una crate e una scritta che attraversa lo schermo.

free
["coins: 60", "money: 2500", "bundle: common-crate", "bundle: starter-gear", "title: <gradient:#FFD54F:#FF8F00>TIER 10|<gray>and we are only getting started"]+3
premium
["coins: 140", "money: 12000", "bundle: rare-crate", "bundle: starter-gear", "bundle: snack", "booster: 1.5 2h"]+4
deluxe
["coins: 220", "money: 22000", "bundle: rare-crate", "bundle: starter-gear", "bundle: potion-kit", "booster: 2.0 2h"]+4
season.rewards.203 chiavi

Il primo cosmetico. Da qui in poi la traccia alterna: soldi, poi qualcosa da usare, poi qualcosa da farsi vedere addosso.

free
["coins: 60", "money: 2500", "item: DIAMOND 3", "bundle: common-crate", "firework: FFD54F"]+2
premium
["coins: 140", "money: 12000", "bundle: rare-crate", "permission: shadowbattlepass.cosmetic.aura 7d", "booster: 1.5 2h"]+3

Sette giorni dell'aura di particelle che lo shop vende a ottocento monete: abbastanza per volerla, non abbastanza da smettere di comprarla.

deluxe
["coins: 230", "money: 24000", "bundle: rare-crate", "permission: shadowbattlepass.cosmetic.aura 14d", "item: SHULKER_BOX 1", "booster: 2.0 2h"]+4
season.rewards.303 chiavi

Una cosa con un nome, che è il senso di un cosmetico: non è più forte, è solo tua, e tutti possono vedere da dove viene.

free
["coins: 110", "money: 4000", "item: DIAMOND 4", "bundle: common-crate"]+1
premium
["coins: 160", "money: 15000", "bundle: rare-crate", { type: ITEM, display: "&cWanderer's Hood", item: {…} }, "booster: 1.5 3h"]+3
deluxe
["coins: 260", "money: 28000", "bundle: rare-crate", "bundle: potion-kit", { type: ITEM, display: "&5Wanderer's Cloak", item: {…} }, "booster: 2.0 3h"]+4
season.rewards.453 chiavi

L'ultimo livello prima della crate di metà percorso: equipaggiamento, così chi arriva a cinquanta ci arriva con qualcosa addosso.

free
["coins: 140", "money: 9000", "item: DIAMOND_BLOCK 1", "bundle: common-crate"]+2
premium
["coins: 290", "money: 38000", "bundle: rare-crate", "bundle: diamond-kit"]+2
deluxe
["coins: 430", "money: 60000", "bundle: rare-crate", "bundle: diamond-kit", "booster: 2.0 3h"]+3
season.rewards.503 chiavi
free
["coins: 400", "money: 20000", "item: NETHERITE_SCRAP 2", "bundle: diamond-kit"]+2
premium
["coins: 600", "money: 60000", "bundle: potion-kit", "bundle: epic-crate", { type: CHOICE, display: "&bPick your prize", icon: CHEST_MINECART, options: […] }]+3
type

Una scelta: il giocatore ne prende solo una, da un menu.

deluxe
["coins: 800", "money: 90000", "bundle: potion-kit", "bundle: epic-crate", "item: SHULKER_BOX 2", "permission: shadowbattlepass.cosmetic.aura 30d", "booster: 2.0 6h"]+5
season.rewards.653 chiavi

Stoccaggio. Poco affascinante, ed è la ricompensa di cui i giocatori parlano davvero.

free
["coins: 200", "money: 13000", "item: SHULKER_BOX 1"]+1
premium
["coins: 420", "money: 56000", "bundle: rare-crate", "item: SHULKER_BOX 2", "item: TOTEM_OF_UNDYING 1"]+3
deluxe
["coins: 420", "money: 50000", "bundle: epic-crate", "item: SHULKER_BOX 3", "item: NETHERITE_INGOT 1"]+3
season.rewards.853 chiavi

La seconda scelta della stagione. Quella al cinquanta riguardava ciò che indossi; questa riguarda come passi gli ultimi quindici livelli.

free
["coins: 380", "money: 30000", "bundle: rare-crate"]+1
premium
["coins: 550", "money: 80000", { type: CHOICE, display: "&bHow you finish the season", icon: CHEST_MINECART, options: […] }]+1
deluxe
["coins: 780", "money: 90000", "bundle: epic-crate", "item: SHULKER_BOX 3", "booster: 2.0 8h"]+3
season.rewards.953 chiavi

A cinque livelli dalla fine, e la fine da sola costa venticinquemila. Questo è il livello che paga quell'ultima salita.

free
["coins: 500", "money: 40000", "bundle: rare-crate", "item: DIAMOND_BLOCK 3"]+2
premium
["coins: 750", "money: 90000", "bundle: epic-crate", "item: NETHERITE_INGOT 3", "booster: 2.0 12h"]+3
deluxe
["coins: 1000", "money: 130000", "bundle: epic-crate", "item: NETHERITE_INGOT 6", "permission: shadowbattlepass.cosmetic.aura 30d", "booster: 2.0 12h"]+4
season.rewards.1003 chiavi

L'ultimo livello. Vale la pena renderlo memorabile: è quello di cui la gente parla, ed è la pubblicità della prossima stagione.

free
["coins: 500", "money: 50000", "item: DIAMOND_BLOCK 4", "bundle: season-end"]+2
premium
["coins: 800", "money: 250000", { type: ITEM, display: "<gradient:#FFD54F:#FF8F00>Season 1 Crown</gradient>", item: {…} }, "bundle: season-end", "permission: shadowbattlepass.title.veterano", "firework: FFD54F"]+4

Qualsiasi testa da un database di teste, tramite URL o base64: texture: "http://textures.minecraft.net/texture/..."

deluxe
["coins: 1500", "money: 400000", "bundle: epic-crate", "bundle: season-end", "item: NETHERITE_BLOCK 1", { type: ITEM, display: "<gradient:#B388FF:#4527A0>Shadow Crown</gradient>", item: {…} }, "permission: shadowbattlep …+7

Lingue

I testi che il plugin mostra ai giocatori, un file per lingua.

lang/

Testi e messaggi
2 file
plugins/ShadowBattlePass/lang/
Note del file

Formato MiniMessage. I placeholder si scrivono <like_this>. Questo è il fallback finale: una chiave che manca da tutti gli altri file di lingua viene cercata qui, una chiave alla volta. Una chiave che manca da questo file su disco viene letta dalla copia dentro il jar del plugin.

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 727
lang/it_IT.yml Italiano 727

Segnaposto più usati

Il plugin li sostituisce con il valore giusto: vanno lasciati scritti così.

  • <prefix>
  • <player>
  • <id>
  • <tier>
  • <count>
  • <amount>
  • <track>
  • <value>
  • <season>
  • <target>
  • <xp>
  • <coins>
  • <quest>
  • <goal>

Gruppi di messaggi

  • prefix 1
  • common 19
  • command 10
  • input 4
  • condition 26
  • reward 25
  • mailbox 3
  • pass 47
  • quest 51
  • objective 68
  • track 17
  • shop 28
  • wallet 1
  • leaderboard 23
  • info 18
  • challenge 17
  • choice 2
  • notify 24
  • booster 4
  • season 3
  • streak 4
  • team 1
  • recap 26
  • stat 12
  • voucher 12
  • gift 18
  • hologram 4
  • admin 216
  • license 38
  • locked 5

Altro

Contenuti pronti, esempi, importazioni: i file che si copiano e si modificano come modello.

quests/

Le missioni, un gruppo per file
6 file
plugins/ShadowBattlePass/quests/

6 file con la stessa forma. Qui sotto 4 esempi per intero, uno per ogni forma diversa; gli altri sono elencati per nome.

  • chains.yml
  • daily.yml
  • monthly.yml
  • premium.yml
  • seasonal.yml
  • weekly.yml

Esempio quests/daily.yml

Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/quests/daily.yml

Copiala al posto di questo file per usarla.

UN FILE = UN GRUPPO DI MISSIONI. Un nuovo file in questa cartella è un nuovo gruppo: non c'è niente da registrare da nessuna parte.

Il gruppo decide il ritmo (giornaliero, settimanale, ...) e quante missioni riceve un giocatore alla volta. Scrivere trenta missioni giornaliere e darne tre al giorno a caso è ciò che tiene vivo un pass per novanta giorni senza scrivere novanta giorni di contenuti.

L'estrazione è stabile: lo stesso giocatore, nello stesso giorno, riceve sempre le stesse missioni, anche dopo venti riavvii.

Ogni tipo di obiettivo:         docs/05-OBIETTIVI.md
Ogni condizione:                docs/07-CONDIZIONI.md
Ogni ricompensa:                docs/06-RICOMPENSE.md
config-version2
pool12 chiavi
iddaily
display"<yellow><bold>Daily</bold>"
description
["&7Three new quests every day.", "&7The rotation is wide: in ninety days", "&7the same three hardly ever come back."]+2
periodDAILY
iconCLOCK
order0
size3

Quante ne riceve un giocatore per ciclo. "all" le consegna tutte.

sequentialfalse
false = il plugin sceglie le missioni a caso, in base al weight.
true  = vengono consegnate nell'ordine del file, una dopo l'altra (storia).
auto-assigntrue
pool.rerolls3 chiavi
amount1

Quante volte al giorno si può cambiare una missione che non ti piace.

cost-coins0

Costo in monete del pass, oltre al cambio gratuito. 0 = gratis.

cost-money0
pool
completion-xp800

Bonus per averle finite tutte e tre in un giorno. È volutamente alto: tre missioni più questo bonus sono il ritmo giornaliero su cui è tarata la curva dei livelli in seasons/season-1.yml.

completion-rewards
["coins: 50", "message: <gradient:#FFD54F:#FF8F00>Day complete!</gradient>"]+1
Le missioni

La forma più piccola è di sei righe:

quest-id:
  display: "&bTitle"
  xp: 500
  objectives:
    - type: MOB_KILL
      amount: 30

Tutto il resto ha un valore di fabbrica sensato.

weight: quanto è probabile che esca. 2 = il doppio della probabilità di un 1. mode: all (tutti gli obiettivi) o any (ne basta uno).

quests39 chiavi
scambi
quests.miner8 chiavi
display"&bTireless miner"
description["&7Go down to where the stone turns dark."]
quests.miner.icon1 chiave
materialDIAMOND_PICKAXE
quests.miner
difficultyEASY
weight2.0
xp600
objectives[{ type: BLOCK_BREAK, target: […], amount: 300…]
no-placed-blocks

Un blocco piazzato da te non conta.

rewards["coins: 20"]
Ancora 35 voci con la stessa forma di miner: prospector, lumberjack, farmer, fisher, nether, duelist, wanderer, sightseer, attendance, breeder, trader, enchanter, brewer, crafter, smelter, well-fed, sleeper, blacksmith, grinder, glassblower, bricklayer, coppersmith, spelunker, scavenger, sniper, arachnophobe, tank, sprinter, swimmer, boatman, horseman, jumper, shearer, achiever, pyrotechnic
combattimento
quests.hunter8 chiavi
display"&cNight hunter"
description["&7Monsters do not kill themselves."]
quests.hunter.icon1 chiave
materialIRON_SWORD
quests.hunter
difficultyMEDIUM
weight2.0
xp800
objectives[{ type: MOB_KILL, target: […], amount: 50, no…]
no-spawner-mobs

I mob da spawner non contano: sarebbe una scorciatoia, non una caccia.

rewards["coins: 30"]
esplorazione
varie
quests.full-day9 chiavi

Una missione con due obiettivi, da completare entrambi.

display"&6A full day"
description["&7A bit of everything."]
quests.full-day.icon1 chiave
materialBUNDLE
quests.full-day
difficultyHARD
weight0.6
xp1500
modeall
objectives
[{ type: BLOCK_BREAK, amount: 200, no-placed-blocks: true }, { type: MOB_KILL, amount: 25, no-spawner-mobs: true }, { type: ITEM_CRAFT, amount: 32 }]+2
rewards["coins: 60", "bundle: snack"]
quests.your-way9 chiavi

Una missione in cui basta uno qualsiasi degli obiettivi.

display"&dYour way"
description
["&7Do any one of these things.", "&8Finishing one is enough."]+1
quests.your-way.icon1 chiave
materialCOMPASS
quests.your-way
difficultyMEDIUM
weight0.8
xp900
modeany
objectives
[{ type: ORE_MINE, amount: 100 }, { type: MOB_KILL, amount: 60 }, { type: ITEM_FISH, amount: 30 }, { type: CROP_HARVEST, amount: 250 }]+3
rewards["coins: 35"]
lavori di tutti i giorni
l'officina

L'incudine, la mola, la fornace: blocchi che quasi tutti i server hanno allo spawn e a cui nessuno ha mai un motivo per avvicinarsi due volte.

sottoterra
combattimento, l'altra metà
in viaggio

Esempio quests/chains.yml

Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/quests/chains.yml

Copiala al posto di questo file per usarla.

UNA STORIA, NON UNA LISTA.

Un pool con "sequential: true" non estrae niente a caso: distribuisce le quest nell'ordine del file, una dopo l'altra, e la successiva compare solo quando la precedente è finita.

Bastano due chiavi per costruirne una:

requires: [ id ]   questa quest compare solo dopo quella
hidden: true       finché non è sbloccata non è nemmeno visibile

Insieme formano un capitolo che si apre quando ci arrivi, invece di una lista di sedici voci grigie che nessuno legge.

"chain" e "step" servono solo a raggrupparle e ordinarle nella GUI: due catene diverse nello stesso file convivono senza problemi - e questo file ne contiene due.

LA STAGIONE SI LEGGE COME UN LIBRO SOLO

La Via del Cercatore   sei capitoli, da un piccone di legno fino alla
                       cosa in fondo al mondo.
Il Lascito             altri cinque, aperti dall'ultimo capitolo del
                       primo: cosa fa un cercatore una volta che l'ha
                       trovata. Costruire, commerciare, l'End, e un nome che
                       resta sul server dopo la stagione.

Undici capitoli in novanta giorni, uno alla volta. La seconda catena è nascosta finché la prima non è finita, così un nuovo giocatore vede un inizio e non un muro di undici voci grigie.

config-version2
pool12 chiavi
idchains
display"<gradient:#B388FF:#4527A0><bold>The Seeker's Path</bold></gradient>"
description
["&7Two stories, eleven chapters.", "&7The next one opens when you finish this one."]+1
periodSEASON
iconWRITTEN_BOOK
order4
size1

Quante ne ha un giocatore alla volta. Con una catena, una.

sequentialtrue

Questa è la riga che la trasforma in una storia.

auto-assigntrue
pool.rerolls1 chiave
amount0
pool
completion-xp45000
completion-rewards
["coins: 1500", "money: 150000", "bundle: epic-crate", "permission: shadowbattlepass.title.cercatore", "broadcast: <gradient:#B388FF:#4527A0><player> read both stories to the very end.</gradient>"]+3
quests11 chiavi
capitolo 1
quests.path-110 chiavi
display"&fI. The first strike"
description
["&7Every seeker starts out with a pickaxe", "&7and no idea what they are looking for."]+1
quests.path-1.icon1 chiave
materialWOODEN_PICKAXE
quests.path-1
chainvia-del-cercatore
step1
difficultyEASY
xp1000
objectives[{ type: BLOCK_BREAK, target: […], amount: 100…]
rewards["item: STONE_PICKAXE 1", "coins: 25"]
unlocks[path-2]
Ancora 8 voci con la stessa forma di path-1: path-2, path-4, path-5, path-6, legacy-1, legacy-2, legacy-3, legacy-5
capitolo 3
quests.path-313 chiavi
display"&bIII. The deep dark"
description
["&7Below Y zero there is no light left.", "&7Only black stone, and whatever lives in it."]+1
quests.path-3.icon1 chiave
materialDEEPSLATE
quests.path-3
chainvia-del-cercatore
step3
difficultyMEDIUM
hiddentrue
requires[path-2]
xp4000
modeall
objectives
[{ type: BLOCK_BREAK, target: […], amount: 500, max-y: 0, no-placed-blocks: true }, { type: MOB_KILL, amount: 50, max-y: 0, no-spawner-mobs: true }]+1
max-y

Solo sotto quota zero: è lì che inizia la vera discesa.

rewards["item: DIAMOND 4", "coins: 100"]
unlocks[path-4]
Il Lascito - cinque capitoli

Si apre quando la Via del Cercatore è finita. La prima storia parla di scendere; questa parla di ciò che si costruisce dopo essere risaliti. È vincolata all'ultimo capitolo della prima, così le due non compaiono mai nello stesso momento.

capitolo 4
quests.legacy-413 chiavi
display"&dIV. The sky at the end"
description
["&7The last door was always open.", "&7Nobody ever looked up, that is all."]+1
quests.legacy-4.icon1 chiave
materialEND_CRYSTAL
quests.legacy-4
chainil-lascito
step4
difficultyEPIC
hiddentrue
requires[legacy-3]
xp16000
modeall
objectives
[{ type: BOSS_KILL, target: […], amount: 1 }, { type: MOB_KILL, target: […], amount: 24, no-spawner-mobs: true }]+1
type

Il drago e gli shulker dicono "sei stato nell'End" senza nominare un mondo: un server che ha rinominato i suoi mondi funziona lo stesso.

rewards
["item: SHULKER_BOX 2", "item: DRAGON_BREATH 8", "coins: 450", "money: 60000"]+2
unlocks[legacy-5]

Esempio quests/premium.yml

Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/quests/premium.yml

Copiala al posto di questo file per usarla.

LE MISSIONI CHE VEDE SOLO CHI HA IL PREMIUM.

Un gruppo di missioni può avere delle condizioni, e finché non sono vere il gruppo non esiste: nessuna scheda grigia, nessuna missione bloccata da guardare con desiderio. Qui c'è una sola condizione:

conditions:
  - "premium: true"

Nel momento in cui qualcuno sblocca la traccia premium - comprandola, ricevendo il permesso, o con /bpa track give - le sue due missioni compaiono entro mezzo minuto, senza riavvii e senza reload.

Perché L'esperienza è bassa

Le missioni qui dentro danno 300-450 di esperienza, meno delle normali giornaliere, che ne danno 500-900. Non è una svista.

Continua a leggere

Il vantaggio del premium sta nelle RICOMPENSE, non nella velocità. Se le missioni premium dessero anche molta più esperienza, chi paga finirebbe la stagione a metà e passerebbe la seconda metà senza niente da fare - che è il modo più rapido per far sembrare il pass una fregatura proprio a chi l'ha comprato. Così invece arrivano alla fine qualche giorno prima di tutti gli altri, e lungo la strada hanno guadagnato molto di più.

Se vuoi il contrario, un premium che corre avanti, alza "xp" qui dentro: sono numeri, niente è sacro. Ricordati solo di rifare i conti in seasons/season-1.yml, perché la curva dei livelli è tarata su quanta esperienza arriva al giorno.

Come farne un altro

Copia questo file, cambia "id" e aggiungi il nuovo id alla voce quest-pools della stagione. Le condizioni possono essere qualsiasi cosa: "track: deluxe" per un gruppo riservato alla traccia più alta, "permission: ..." per un rank, "playtime: 10h" per i giocatori che sono in giro da un po'. Sono le stesse usate ovunque nel plugin, e sono spiegate in docs/07-CONDIZIONI.md.

config-version2
pool12 chiavi
idpremium
display"<gold><bold>Premium</bold>"
description
["&7Two commissions a day, just for you.", "&7A little more experience, many more rewards."]+1
periodDAILY
iconGOLD_INGOT
order3
size2
auto-assigntrue
conditions["premium: true"]

LA riga che rende esclusivo questo gruppo. Toglila e diventa un gruppo normale, visibile a tutti.

pool.rerolls2 chiavi

Due cambi gratuiti invece di uno: un vantaggio che si sente ogni giorno e che non costa niente al bilanciamento della stagione.

amount2
cost-coins0
pool
completion-xp300
completion-rewards["coins: 50", "money: 5000"]
quests24 chiavi
quests.premium-digging8 chiavi
display"&6Commission: stone"
description
["&7Five hundred blocks.", "&8Pays twice the usual."]+1
quests.premium-digging.icon1 chiave
materialGOLDEN_PICKAXE
quests.premium-digging
difficultyMEDIUM
weight1.8
xp400
objectives[{ type: BLOCK_BREAK, amount: 500, no-placed-b…]
rewards["coins: 60", "money: 12000"]
Ancora 23 voci con la stessa forma di premium-digging: premium-ores, premium-hunt, premium-foundry, premium-harvest, premium-luck, premium-jeweller, premium-night, premium-survey, premium-ledger, premium-timber, premium-quarry, premium-fishmonger, premium-market, premium-stable, premium-granary, premium-armoury, premium-apothecary, premium-caravan, premium-nether, premium-masonry, premium-forge, premium-contract, premium-vault
gli scambi
i turni lunghi

Due missioni al giorno per novanta giorni sono centottanta estrazioni. Con sei missioni chi ha il premium vede la stessa commissione ogni tre giorni e smette di leggerla; con ventiquattro no.

Esempio quests/seasonal.yml

Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/quests/seasonal.yml

Per usarla, copiala al posto di questo file.

Quest che durano quanto la stagione e non si azzerano mai. Vengono tutte assegnate insieme ("size: all"), così dal primo giorno un giocatore vede cosa gli riservano i prossimi tre mesi.

SONO LA FORMA DELLA STAGIONE

Sono tredici, e apposta non sono tredici versioni dello stesso muro di numeri. Quattro sono totali che raggiunge solo chi entra quasi tutti i giorni, quattro premiano l'andare da qualche parte invece di ripetere qualcosa, tre sono imprese una tantum che si possono fare in un pomeriggio se sai come, e due riguardano il pass stesso. Tutte insieme dicono cos'è questa stagione: esplorare, scavare e tornare.

Nessuna si può finire il primo giorno, e nessuna ha bisogno dell'ultima settimana: la stagione ha una forma, non una scadenza.

config-version2
pool11 chiavi
idseasonal
display"<gradient:#FFD54F:#FF8F00><bold>Seasonal</bold></gradient>"
description
["&7They last as long as the season.", "&7No reset, no hurry."]+1
periodSEASON
iconNETHER_STAR
order3
sizeall
auto-assigntrue
pool.rerolls1 chiave
amount0
pool
completion-xp50000
completion-rewards
["coins: 2000", "money: 250000", "bundle: season-end", "permission: shadowbattlepass.title.leggenda", "broadcast: <gradient:#FFD54F:#FF8F00><player> finished every seasonal quest!</gradient>"]+3

Lo stesso titolo che dà il centesimo livello della traccia deluxe. Due strade per un unico distintivo è una scelta voluta: il giocatore che ha completato tutte le missioni stagionali se l'è guadagnato quanto quello che è salito fino in cima.

quests15 chiavi
quests.hundred-thousand7 chiavi
display"&bA hundred thousand"
description["&7A hundred thousand blocks over the whole s…]
quests.hundred-thousand.icon1 chiave
materialNETHERITE_PICKAXE
quests.hundred-thousand
difficultyEPIC
xp25000
objectives[{ type: BLOCK_BREAK, amount: 100000, no-place…]
rewards["coins: 1500", "bundle: epic-crate"]
Ancora 14 voci con la stessa forma di hundred-thousand: legend, globetrotter, three-worlds, loyal, companion, deep-hundred, builder-of-things, harvest-season, long-road, dragonslayer, deep-dark, ancient-hoard, the-climb, hundred-quests
i totali
la strada
le imprese

templates/

I modelli di stagione
13 file
plugins/ShadowBattlePass/templates/

13 file con la stessa forma. Qui sotto 4 esempi per intero, uno per ogni forma diversa; gli altri sono elencati per nome.

  • index.yml
  • pvp/daily.yml
  • pvp/premium.yml
  • pvp/season.yml
  • pvp/weekly.yml
  • skyblock/daily.yml
  • skyblock/premium.yml
  • skyblock/season.yml
  • skyblock/weekly.yml
  • survival/daily.yml
  • survival/premium.yml
  • survival/season.yml
  • survival/weekly.yml

Esempio templates/survival/season.yml

Template "survival" - la stagione

Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/templates/survival/season.yml

Una volta applicato il template, copiala al posto di seasons/survival.yml (cioè dopo /bpa template apply survival).

Cinquanta livelli in trenta giorni, due tracce: free e premium.

I CONTI, così sai cosa stai installando e cosa cambiare:

La stagione vale 99.000 di esperienza in totale (curva lineare: 1.000 al primo livello, 2.960 al cinquantesimo).

Un giocatore FREE che fa le sue quest ogni giorno guadagna:

3 giornaliere x ~600      = 1.800
bonus giornata completa   =   500
settimanali (2 x 4.000)   = ~1.150 al giorno
circa 3.450 al giorno -> finisce intorno al giorno 28

Un giocatore PREMIUM ha anche due missioni al giorno da 400:

circa 4.250 al giorno  ->  finisce intorno al giorno 23, e da lì
in poi prosegue nei livelli infiniti.
Continua a leggere

Se il tuo server è più o meno attivo di così, la manopola giusta è "increment" qui sotto: alzarlo allunga la stagione, abbassarlo la accorcia. Non toccare "count" una volta iniziata una stagione.

config-version2
season15 chiavi
idsurvival
display"<gradient:#66BB6A:#1B5E20><bold>Survival Season</bold></gradient>"
description
["&7Thirty days. Fifty tiers.", "&7Dig, build, survive."]+1
season.icon2 chiavi
materialGRASS_BLOCK
glowtrue
season
enabledtrue
duration30d
auto-start-nextfalse
Le due tracce
season.tracks2 chiavi
season.tracks.free5 chiavi
display"<green><bold>Free</bold>"
description["&7For everyone, always."]
iconLIME_DYE
defaulttrue
order0
season.tracks.premium6 chiavi
display"<gold><bold>Premium</bold>"
description
["&7One more reward at every tier,", "&7and two quests a day just for you.", "", "<gray>Unlock it and you get <white>right away</white> everything", "&7you had already earned."]+4
iconGOLD_INGOT
order1
permission"shadowbattlepass.premium"

Il nodo da dare dal tuo store.

unlock-retroactivetrue
I livelli
season.tiers5 chiavi
count50
season.tiers.curve3 chiavi
typeLINEAR
base1000
increment40
season.tiers.overrides2 chiavi

I due livelli che devono pesare più degli altri.

253000
506000
season.tiers
milestone-every10
milestones[1, 25]
season.infinite3 chiavi
enabledtrue
xp5000
rewards["coins: 100", "money: 5000"]
season
quest-pools
[survival-daily, survival-weekly, survival-premium]+1

Solo le missioni di questo template: le giornaliere di esempio del plugin restano fuori, così due bilanciamenti diversi non si mescolano.

join-rewards
["coins: 25", "item: BREAD 16", "message: <gradient:#66BB6A:#1B5E20>Welcome to the season!</gradient> <gray>Open <white>/bp</white> to begin."]+1
completion-rewards
["coins: 1000", "money: 100000", "booster: 2.0 24h", "broadcast: <gradient:#66BB6A:#1B5E20><player> completed the Survival Season!</gradient>"]+2
season.catch-up2 chiavi
enabledtrue
max-multiplier2.0
Le ricompense

Questo è il ritmo, e vale la pena capirlo prima di cambiarlo:

Continua a leggere
ogni livello        free: monete             premium: monete + soldi
ogni 5 livelli      free: materiali utili    premium: una crate
ogni 10 livelli     free: qualcosa di buono
                    premium: crate rara + booster
livello 25          il regalo di metà stagione
livello 50          quello di cui la gente parla

Le voci "bundle" sono i pacchetti in rewards.yml: cambia quelli e cambi in un colpo ogni livello che li usa.

season.rewards8 chiavi
season.rewards.default2 chiavi
free["coins: 8"]
premium["coins: 15", "money: 1000"]
season.rewards.1-52 chiavi

I primi cinque livelli sono generosi apposta: è lì che un giocatore decide se questo pass fa per lui o no.

free["coins: 20", "money: 1500"]
premium
["coins: 40", "money: 4000", "item: IRON_INGOT 8"]+1
Ancora 6 voci con la stessa forma di default: *5, *10, 10, 25, 40, 50

Esempio templates/skyblock/daily.yml

Template "skyblock" - le missioni giornaliere

Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/templates/skyblock/daily.yml

Una volta applicato il template, copiala al posto di quests/skyblock-daily.yml (dopo /bpa template apply skyblock).

Dodici quest, tre al giorno. Nessuna ti chiede di andare da qualche parte: su un'isola non si viaggia, si produce.

NOTA: le quest che dipendono da un altro plugin (guadagnare soldi, alzare il livello dell'isola) mancano apposta, così questo template funziona anche su un server appena installato. Aggiungerle è facile, e l'esempio è in fondo al file.

config-version2
pool11 chiavi
idskyblock-daily
display"<yellow><bold>Daily</bold>"
description["&7Three new quests every day."]
periodDAILY
iconCLOCK
order0
size3
auto-assigntrue
pool.rerolls2 chiavi
amount1
cost-coins0
pool
completion-xp500
completion-rewards
["coins: 30", "message: <gradient:#FFD54F:#FF8F00>Day complete!</gradient>"]+1
quests12 chiavi
il generatore
quests.skyblock-generator8 chiavi
display"&7The generator"
description["&7Five hundred blocks from the cobblestone g…]
quests.skyblock-generator.icon1 chiave
materialCOBBLESTONE
quests.skyblock-generator
difficultyEASY
weight2.2
xp500
objectives[{ type: BLOCK_BREAK, target: […], amount: 500…]
no-placed-blocks

Su un generatore i blocchi non sono "piazzati da te": nascono. Se il tuo generatore usa blocchi che il plugin vede come piazzati, togli questa riga.

rewards["coins: 15"]
Ancora 11 voci con la stessa forma di skyblock-generator: skyblock-furnace, skyblock-harvest, skyblock-cane, skyblock-breeding, skyblock-trees, skyblock-crafter, skyblock-enchanter, skyblock-trader, skyblock-mobs, skyblock-fishing, skyblock-your-way
Le missioni che dipendono da un altro plugin

Decommentale quando quel plugin è presente. Senza, resterebbero a zero e sprecherebbero uno dei tre slot del giorno.

skyblock-earnings:
   display: "&6Chi lavora guadagna"
   icon:
     material: GOLD_INGOT
   difficulty: MEDIUM
   weight: 1.2
   xp: 650
   objectives:
- type: MONEY_EARN        # richiede ShadowEconomy
       amount: 50000
   rewards:
     - "coins: 20"
skyblock-island:
   display: "&bL'isola cresce"
   icon:
     material: BEACON
   difficulty: HARD
   weight: 0.8
   xp: 900
   objectives:
- type: ISLAND_LEVEL      # richiede ShadowSkyBlock
       amount: 50
   rewards:
     - "coins: 40"

Esempio templates/pvp/daily.yml

Template "pvp" - le missioni giornaliere

Note del file

VERSIONE ITALIANA, nella cartella di questo plugin:

esempi/it_IT/templates/pvp/daily.yml

Una volta applicato il template, copiala al posto di quests/pvp-daily.yml (dopo /bpa template apply pvp).

Undici missioni, tre al giorno, tra 500 e 900 di esperienza.

Si possono fare tutte da soli contro i mob: nessuno dovrebbe dipendere da quante persone sono online per fare progressi. La missione che chiede di uccidere GIOCATORI è l'unica eccezione, ed è commentata in fondo con le sue ragioni.

config-version2
pool11 chiavi
idpvp-daily
display"<yellow><bold>Daily</bold>"
description["&7Three new quests every day."]
periodDAILY
iconCLOCK
order0
size3
auto-assigntrue
pool.rerolls2 chiavi
amount1
cost-coins0
pool
completion-xp400
completion-rewards["coins: 30", "item: GOLDEN_APPLE 2"]
quests11 chiavi
combattimenti
quests.pvp-hunt8 chiavi
display"&cHunting party"
description
["&7Sixty monsters.", "&8Mobs from spawners do not count."]+1
quests.pvp-hunt.icon1 chiave
materialIRON_SWORD
quests.pvp-hunt
difficultyEASY
weight2.2
xp550
objectives[{ type: MOB_KILL, amount: 60, no-spawner-mobs…]
rewards["coins: 18"]
Ancora 10 voci con la stessa forma di pvp-hunt: pvp-damage, pvp-skeletons, pvp-hostiles, pvp-nether, pvp-endure, pvp-smith, pvp-anvil, pvp-supplies, pvp-ores, pvp-your-way
La missione per uccidere giocatori

Decommentala solo se sai cosa stai facendo.

Su un server tranquillo è impossibile e brucia uno slot per tutto il giorno; su uno affollato diventa un incentivo a campare l'uscita dello spawn. Se la attivi, tieni basso il numero (tre bastano e avanzano) e basso il weight, così esce di rado.

pvp-duel:
  display: "&4Duellante"
  description:
    - "&7Tre giocatori."
  icon:
    material: PLAYER_HEAD
  difficulty: HARD
  weight: 0.5
  xp: 900
  objectives:
    - type: PLAYER_KILL
      amount: 3
  rewards:
    - "coins: 50"

Esempio templates/index.yml

Note del file

Il catalogo dei battle pass già pronti.

Questo file vive DENTRO il jar e non viene mai estratto: i template che non applichi non ingombrano mai la cartella del plugin.

/bpa template list
/bpa template info <id>
/bpa template apply <id>

Applicare copia i file al loro posto e niente di più: non avvia niente e non sovrascrive niente. Da lì in poi sono normali file YAML, modificabili a mano o con l'editor in gioco.

Sotto "files" la chiave è il nome del file dentro la cartella del template SENZA .yml (un punto in una chiave YAML verrebbe letto come un percorso annidato), e il valore è dove finisce nella cartella del plugin. Quindi "season: seasons/survival.yml" significa: prendi templates/survival/season.yml e scrivilo in seasons/survival.yml.

config-version2
templates3 chiavi
Survival classico
templates.survival7 chiavi
display"<gradient:#66BB6A:#1B5E20><bold>Survival</bold></gradient>"
flavour"Mine, build, survive"
description
["The pass for an ordinary survival server.", "Quests for digging, gathering, fighting and exploring,", "tuned for someone who plays an hour or two a day.", "", "Whoever plays every day reaches the end around day 28."]+4
tiers50
days30
quests28
templates.survival.files4 chiavi
season"seasons/survival.yml"
daily"quests/survival-daily.yml"
weekly"quests/survival-weekly.yml"
premium"quests/survival-premium.yml"
SkyBlock
templates.skyblock7 chiavi
display"<gradient:#4FC3F7:#0288D1><bold>SkyBlock</bold></gradient>"
flavour"Island, farms, economy"
description
["The pass for a skyblock server.", "Quests about generators, farms, trading and money,", "with little that depends on exploring.", "", "It works well with the island team pass."]+4
tiers50
days30
quests25
templates.skyblock.files4 chiavi
season"seasons/skyblock.yml"
daily"quests/skyblock-daily.yml"
weekly"quests/skyblock-weekly.yml"
premium"quests/skyblock-premium.yml"
PvP e combattimento
templates.pvp7 chiavi
display"<gradient:#EF5350:#B71C1C><bold>PvP</bold></gradient>"
flavour"Fight, hunt, outlive the others"
description
["The pass for a server where people fight.", "Quests about kills, damage, gear and bosses,", "with rewards meant for those who keep coming back to the arena.", "", "Shorter and steeper: 40 tiers in 30 days."]+4
tiers40
days30
quests23
templates.pvp.files4 chiavi
season"seasons/pvp.yml"
daily"quests/pvp-daily.yml"
weekly"quests/pvp-weekly.yml"
premium"quests/pvp-premium.yml"

Tutta la documentazione