Moduli Filosofia Architettura Installazione Download Changelog Wiki Scarica il JAR

Open Politics

Compilabile

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

Namespacedev.openrp.politics
Comandi/politica · /voto · /openpolitics
Dipendenzenessuna obbligatoria
OpzionaliOpenCore · OpenFDO · OpenCompanies · OpenEconomy · OpenIdentity · WorldGuard · LuckPerms
APIOpenPoliticsApi

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.

Core
Charge · Government · Election · Act · Law · CollegiateVote
Configgovernments · charges · act_types · law_categories
Adaptereconomy · company · identity · region · authority

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.

AreaDomandaCosa fa
chargesCosa seiRuoli istituzionali con autorità ordinale, titolari, mandato e capability.
governmentCome ci sei arrivatoInsieme di cariche con un meccanismo di assegnazione.
actsCosa firmiDocumenti ufficiali prodotti da chi ne ha la capability — timbrati come libro fisico.
lawsCosa hai decisoAtti 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.

ElezioneI giocatori votano. Il plugin gestisce campagna, candidature, raccolta voti (uno a testa), calcolo del risultato e assegnazione automatica al/ai vincitore/i. Voto anonimo.
NominaDecisione unilaterale di chi detiene APPOINT su quella carica. Nessun voto.
EreditarietàLa carica passa al successore designato dal titolare con /politica successore. Senza successore, diventa vacante.
ConquistaAppartiene a chi controlla fisicamente una region (via 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.

Capability, non permessiL'autorità vera non è un nodo permesso: è la carica che ricopri. SIGN_ACT, SIGN_LAW, APPOINT, VETO, DECLARE_EMERGENCY… la config decide quale carica le detiene.
Mandato e scadenzaUna carica può avere un mandato a tempo. Alla scadenza il plugin re-indice l'elezione o applica la successione, secondo il meccanismo della carica.
Storage durevoleCariche, atti, leggi, elezioni e voti collegiali su YAML atomico con backup (o 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.

AdapterDefaultAssente / non reale →
StorageAdapterYAML atomico con backup (o memory)
PermissionAdapterBukkit (riflette LuckPerms)
NotificationAdapterchat / broadcast
EconomyAdapterno-opun bridge Open Economy espone il budget pubblico ai titolari di MANAGE_BUDGET
CompanyAdapterno-opun bridge Open Companies riconosce le revoche di licenza dei titolari di REVOKE_LICENSE
IdentityAdapterno-opun bridge Open Identity rende le cariche un tesserino fisico che decade a fine mandato
RegionAdapterno-opun bridge WorldGuard abilita il meccanismo conquest
AuthorityAdapterno-opun 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.

ComandoFunzione
/politica cariche · carica <id>cariche attive con titolari, e dettaglio di una carica
/politica leggi · legge <id> · archivioregistro pubblico, testo di una legge, archivio storico
/politica atti · governoatti firmati recenti, struttura del governo
/politica atto <tipo> <titolo>firma un atto e ricevi il libro timbrato
/politica nomina · rimuovi · veto · successore · abrogaazioni dei titolari, gated dalle capability della carica
/politica emergenza · elezioni indici · votastato d'emergenza, indizione elezioni, voto collegiale
/voto lista · candidatura · <id> <player> · risultatipartecipazione 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.

java · OpenPoliticsApi
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 titolari
  • hasCapability(uuid, cap) — l'autorità live di un giocatore
  • getActiveLaws(gov) / getLaw(id) — il registro pubblico
  • wasActiveDuring(id, moment) — la legge del tempo del fatto, per i giudici RP
  • recentActs(n) / openElections() — atti ed elezioni in corso
  • adapters() — 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 election e conquest
  • Non espone i voti elettorali quando anonymous_voting è attivo
  • Non crasha se un adapter manca: disattiva in silenzio la capability collegata