Open Politics
CompilabileIl motore politico per server roleplay: il Sindaco eletto, il Re per conquista, il Senato che vota una legge. Il core non conosce nessuna di queste cose — conosce una carica con un titolare, un governo che la assegna, un atto firmato, una legge registrata. Il plugin certifica, non governa: registra chi aveva l'autorità di decidere ed espone la decisione, le conseguenze le vivono i giocatori.
RP First: il plugin certifica, non governa
Open Politics non esegue mai le conseguenze di una decisione politica. Una legge che vieta le armi in centro non disabilita le armi in centro: è un documento firmato dall'autorità competente che giocatori e FDO usano come riferimento narrativo. Se qualcuno porta un'arma in centro, le FDO lo multano in RP. Il plugin non tocca niente.
Charge · Government · Election · Act · Law · CollegiateVote
Il test di neutralità: "Sindaco" → config. "Decreto Legge" → config. "Elezione democratica" → config (è un tipo di meccanismo). "Titolare di una carica che produce un atto firmato" → core. Il realistico italiano (un Comune) è solo la configurazione di riferimento; examples/fantasy (un Regno) e examples/oligarchia (un Consiglio dei Cinque) sono l'opposto sullo stesso codice.
Le quattro aree
Non sono sottomoduli separati: sono aspetti dello stesso sistema, attivabili in config.yml. Gli atti dipendono dalle cariche; le leggi dipendono dagli atti.
| Area | Domanda | Cosa fa |
|---|---|---|
charges | Cosa sei | Ruoli istituzionali con autorità ordinale, titolari, mandato e capability. |
government | Come ci sei arrivato | Insieme di cariche con un meccanismo di assegnazione. |
acts | Cosa firmi | Documenti ufficiali prodotti da chi ne ha la capability — timbrati come libro fisico. |
laws | Cosa hai deciso | Atti che hanno completato l'iter: registro pubblico, archivio storico, mai eseguito. |
I quattro meccanismi di assegnazione
Come si ottiene una carica è nella config. Elezione e conquista sono gli unici casi in cui il plugin assegna una carica automaticamente; tutto il resto è firmato da un titolare.
APPOINT su quella carica. Nessun voto./politica successore. Senza successore, diventa vacante.RegionAdapter, es. WorldGuard). Il plugin verifica periodicamente il controllo.L'iter legislativo
Un atto di un tipo con requires_vote viene sottoposto a un organo collegiale (una carica con max_holders > 1): quorum e maggioranza decidono se passa. Se il tipo prevede veto_allowed, si apre una finestra di veto per chi detiene VETO. Quando l'iter è completo e il tipo è can_become_law, l'atto è promulgato in legge.
Il plugin traccia l'iter, non lo forza: uno step saltato resta registrato come proceduralmente contestabile, non punito. Le leggi attive sono pubbliche (/politica leggi); le abrogate restano nell'archivio storico, così un giudice in RP può applicare la legge che era in vigore al momento del fatto — anche se oggi è abrogata.
SIGN_ACT, SIGN_LAW, APPOINT, VETO, DECLARE_EMERGENCY… la config decide quale carica le detiene.memory). Una scrittura interrotta non corrompe i dati.Adapter
Ogni adapter ha un default funzionante ed è scoperto a runtime dal Bukkit ServicesManager. Assente o non reale, la feature collegata degrada in silenzio — nessun crash, nessuna dipendenza dura.
| Adapter | Default | Assente / non reale → |
|---|---|---|
StorageAdapter | YAML atomico con backup (o memory) | — |
PermissionAdapter | Bukkit (riflette LuckPerms) | — |
NotificationAdapter | chat / broadcast | — |
EconomyAdapter | no-op | un bridge Open Economy espone il budget pubblico ai titolari di MANAGE_BUDGET |
CompanyAdapter | no-op | un bridge Open Companies riconosce le revoche di licenza dei titolari di REVOKE_LICENSE |
IdentityAdapter | no-op | un bridge Open Identity rende le cariche un tesserino fisico che decade a fine mandato |
RegionAdapter | no-op | un bridge WorldGuard abilita il meccanismo conquest |
AuthorityAdapter | no-op | un bridge Open FDO riceve le dichiarazioni di stato d'emergenza |
Comandi
Il permesso openpolitics.use abilita i comandi; openpolitics.admin sblocca /politica admin. L'autorità vera è la carica che ricopri.
| Comando | Funzione |
|---|---|
/politica cariche · carica <id> | cariche attive con titolari, e dettaglio di una carica |
/politica leggi · legge <id> · archivio | registro pubblico, testo di una legge, archivio storico |
/politica atti · governo | atti firmati recenti, struttura del governo |
/politica atto <tipo> <titolo> | firma un atto e ricevi il libro timbrato |
/politica nomina · rimuovi · veto · successore · abroga | azioni dei titolari, gated dalle capability della carica |
/politica emergenza · elezioni indici · vota | stato d'emergenza, indizione elezioni, voto collegiale |
/voto lista · candidatura · <id> <player> · risultati | partecipazione alle elezioni |
/openpolitics <status|reload> | stato adapter/contatori e ricarica config |
API pubblica
Recupera OpenPoliticsApi dal Services Manager di Bukkit. È il registro istituzionale del server: chi ricopre quale carica, cosa può fare, cosa ha firmato e — soprattutto per gli altri moduli — il registro pubblico delle leggi che Open FDO aggancia ai fascicoli.
OpenPoliticsApi api = Bukkit.getServicesManager().load(OpenPoliticsApi.class);
// Open FDO: aggancia le leggi violate a un fascicolo e applica la legge del tempo del fatto
List<Law> attive = api.getActiveLaws("comune");
boolean inVigore = api.wasActiveDuring(lawId, momentoDelFatto);
// Chi puo' dichiarare l'allerta? Open FDO lo chiede per sapere chi attiva l'emergenza
List<String> cariche = api.chargesWithCapability("comune", PoliticalCapability.DECLARE_EMERGENCY);
// Registra il tuo bridge come adapter
api.adapters().setIdentity(myIdentityBridge);
governments()/charges()/holdersOf(id)— struttura e titolarihasCapability(uuid, cap)— l'autorità live di un giocatoregetActiveLaws(gov)/getLaw(id)— il registro pubblicowasActiveDuring(id, moment)— la legge del tempo del fatto, per i giudici RPrecentActs(n)/openElections()— atti ed elezioni in corsoadapters()— sostituzione runtime di economy, company, identity, region, authority
Sicurezza e neutralità
- Il core non contiene nomi di cariche, governi, tipi di atto o categorie di legge: tutto in config
- Non esegue le conseguenze di una legge — le certifica e le espone
- Non impone l'iter legislativo — lo traccia e segnala se è stato rispettato
- Non assegna cariche automaticamente, tranne nei meccanismi
electioneconquest - Non espone i voti elettorali quando
anonymous_votingè attivo - Non crasha se un adapter manca: disattiva in silenzio la capability collegata