Open FDO
CompilabileIl sistema nervoso dello stato per server roleplay: corpi, gradi e capability, atti depositati come libri timbrati, fascicoli con catena di custodia delle prove, ricercati, detenzione e foglio di servizio. Neutro rispetto all'ambientazione: il core non conosce nessun corpo, grado, reato o sigla — tutto vive nella config o dietro adapter opzionali.
Neutro rispetto all'ambientazione
Ogni feature passa un test: funzionerebbe identica su un server fantasy medievale? Se no per un'assunzione di ambientazione, finisce in config; se no perché il concetto non esiste in quel mondo, finisce dietro un adapter opzionale. Il realistico italiano è solo la configurazione di riferimento, inclusa come default.
Authority · Act · Dossier · Evidence · Conviction · Wanted
Il core non importa mai nulla dagli adapter. Se un adapter manca, la capability collegata sparisce in silenzio: nessun crash, nessuna dipendenza dura.
Capability, non corpi
Gli atti non sono legati ai corpi: sono legati a capability, e le capability sono assegnate ai gradi dalla config. I gradi inferiori sono ereditati dai superiori; un grado apicale può arruolare e promuovere nel proprio corpo.
| Capability | Significato | Adapter |
|---|---|---|
DETAIN_TEMPORARY / ARREST | Fermo a tempo / arresto con fascicolo e custodia | — |
ADD_CHARGE / SEIZE_EVIDENCE | Capi d'imputazione e sequestro prove | — |
OPEN_INVESTIGATION / ISSUE_FINE | Apertura indagine e sanzioni | — |
REQUEST_WARRANT / ISSUE_WARRANT | Richiesta ed emissione mandati | — |
ISSUE_VERDICT / EXTEND_CUSTODY | Sentenza e proroga della custodia | — |
FLAG_WANTED / DECLARE_ALERT | Registro ricercati e stato d'allerta | — |
ECONOMIC_AUDIT | Audit economico in sola lettura | EconomyAudit |
MANAGE_DETENTION | Gestione della detenzione | Detention |
IMPORT_EXTERNAL_RECORD | Referti e atti esterni | ExternalRecord |
L'atto è un libro
/atto nuovo mostra solo gli atti la cui capability è posseduta dal grado e il cui adapter (se richiesto) è presente. L'agente riceve un libro scrivibile e scrive lui il contenuto: il plugin non lo compila mai.
Fascicolo e catena di custodia
Il fascicolo ha tre sezioni: A intestazione (immutabile), B corpo del procedimento (capi, prove, note, custodia — mutabile), C esito (sentenza, immutabile una volta firmata). L'id segue il pattern di config, default {anno}/{numero}/{sigla_corpo}.
- Le prove tracciano una catena di custodia append-only: raccolta, trasferimenti, deposito
- Un buco nella catena è ciò che rende la prova contestabile — il core registra, non arbitra
- I capi d'imputazione pescano dal catalogo reati di
crimes.yml - La custodia cautelare ha una scadenza con timer; il giudice firma la sentenza in sezione C
Adapter
Cinque adapter di base hanno un default funzionante; gli adapter verso il mondo esterno sono opzionali e scoperti a runtime. Assenti, la capability e l'atto collegati semplicemente spariscono.
| Adapter | Responsabilità | Assente → |
|---|---|---|
StorageAdapter | Persiste agenti, fascicoli, prove, ricercati, atti, detenzioni | default YAML/memoria |
PermissionAdapter | Permessi Bukkit (riflette LuckPerms) | default bukkit |
NotificationAdapter | Notifiche: evasioni, allerte | default chat |
LoggingAdapter | Audit trail delle operazioni sensibili | file / console / none |
RegionAdapter | Armadi prove e zone d'intercettazione | default no-op |
DutyStatusAdapter | Stato di servizio | fallback interno /fdo servizio |
DetentionAdapter | Esecuzione fisica della pena | condanna registrata, RP manuale |
EconomyAuditAdapter | Audit economico | la capability sparisce |
ExternalRecordAdapter | Referti e atti esterni | la capability sparisce |
RadioAdapter · EvidenceSourceAdapter | Intercettazione · tracce sulle prove | feature disattivata |
Detenzione: evento astratto + adapter
Il core decide che c'è una condanna e gestisce il timer della pena e il rilascio automatico a fine pena; l'adapter decide cosa significa fisicamente.
Comandi
Cinque comandi radice. Il permesso Bukkit abilita solo l'uso del comando: l'autorità reale viene dalle capability del grado.
| Comando | Funzione |
|---|---|
/fdo | Identità: info, identifica, tesserino, servizio, arruola, congeda, promuovi, degrada, reload |
/atto nuovo [tipo] [bersaglio] | Apre il menu degli atti disponibili o consegna il libro da compilare e firmare |
/registro | Archivi: fascicolo, lista, capo, wanted, foglio di servizio, prova (catena di custodia) |
/detenzione | lista, info, rilascia, condanna, proroga (alias /carcere) |
/allerta | stato, dichiara <livello>, revoca |
API pubblica
Recupera OpenFdoApi dal Services Manager di Bukkit. Registra i tuoi adapter (carcere, audit, referti) e usa lo stesso percorso validato dei comandi.
OpenFdoApi api = Bukkit.getServicesManager().load(OpenFdoApi.class);
// Collega il tuo modulo carcere come esecutore della pena
api.adapters().setDetention(myPrisonModule);
// Il modulo carcere segnala un'evasione confermata: il core aggiorna il
// fascicolo, avvisa gli agenti in servizio e propone lo status ricercato
api.reportEscape(inmate, "world", x, y, z);
// Apri un fascicolo via API (stesso percorso validato dei comandi)
api.dossiers().open(subject, "Mario", "polizia", agentUuid, 48);
agents()— arruolamento, gradi e risoluzione capabilitydossiers()— fascicoli, capi d'imputazione, custodia e sentenzeevidence()— prove e catena di custodiawanted()— registro ricercatidetention()— ordini di detenzione e timer della penaadapters()— sostituzione runtime di storage, detention, audit e altro
Sicurezza e neutralità
- Il core non contiene il nome di nessun corpo, grado, reato o sigla: tutto in config
- Il numero di fascicolo è un contatore persistito per anno e corpo: niente collisioni dopo un riavvio
- Le sezioni A e C del fascicolo sono immutabili dopo la firma
- Storage durevole: scrittura atomica con backup, recupero da write interrotti
- Non crasha se un adapter manca: disattiva in silenzio la capability collegata
- Eventi Bukkit: atto prodotto, fascicolo aperto