Open Crime
CompilabileIl motore della criminalità organizzata per server roleplay: organizzazioni illegali, territorio, produzione multistadio, traffico, riciclaggio ed estorsione. Neutro rispetto all'ambientazione: il core non conosce nessuna sostanza, organizzazione reale o metodo criminale — tutto vive nella config o dietro adapter opzionali.
RP First: niente heat, solo scoperte
Non esiste un numero di "attenzione" nascosto che cresce nel tempo. Il core è opaco alle forze dell'ordine per default: ogni evento criminale resta privato finché un'azione RP concreta non lo collega a un fascicolo. Se nessuno fa nulla, il plugin non fa nulla.
IllegalOrg · Territory · IllegalGood · CrimeEvent · Discovery
Un'organizzazione senza nessuna Discovery non esiste agli occhi delle autorità. Le FDO leggono gli eventi di un'org solo passando un dossierId che vere scoperte hanno collegato.
Le cinque scoperte
L'unico modo in cui le autorità vengono a sapere qualcosa. Ogni Discovery nasce da un'azione RP specifica, è attribuita a chi l'ha fatta e collega un evento a un fascicolo.
| Tipo | Come nasce |
|---|---|
denuncia | Un civile usa /denuncia vicino a un agente — entrambi fisicamente presenti, e un crimine dev'essere avvenuto lì di recente |
scoperta_fisica | Un agente entra in una location di produzione attiva — notifica solo a lui, solo in quel momento |
arresto | Un membro arrestato con beni illegali collega gli eventi recenti dell'org al fascicolo |
informatore | Un membro usa /informatore vicino a un agente abilitato e rivela ciò che sa |
indagine | Un agente collega manualmente scoperte già esistenti (lato Open FDO) |
Cinque sottosistemi attivabili
Concettualmente plugin separati che dipendono dal core; distribuiti come un unico plugin con i toggle in config.yml. Un modulo disattivato non registra nulla.
/syndicate · /territory — fondazione, gerarchia, reclutamento, chat interna, conquista del territorio./produce — produzione multistadio in location fisiche, con ingredienti reali e presenza del worker./traffic — spedizioni lungo rotte fisiche; corrieri vulnerabili, beni sequestrabili./launder — denaro sporco → pulito nel tempo, con perdita. Un audit lo intercetta solo se ancora in corso./racket — pizzo sulle aziende, con escalation. Il livello 3 non fa nulla in automatico: è RP puro./denuncia · /informatore · /opencrime — il registro e il ponte verso le autorità.Gerarchia e capability dalla config
Le gerarchie non sono hardcoded: in syndicate.yml definisci ranghi, ordine e capability. Le capability sono ereditate verso l'alto; il rango apicale di solito ha ALL. Un fantasy avrà "Adepto → Gran Maestro" e il plugin non vede la differenza.
INVITE·EXPEL·PROMOTE·DEMOTE·DISSOLVEVIEW_TREASURY·TERRITORY_CLAIMPRODUCE·PRODUCE_CANCELTRAFFIC·TRAFFIC_AGREEMENT·TRAFFIC_LOGLAUNDERRACKET_IMPOSE·RACKET_COLLECT·RACKET_ESCALATE·RACKET_MANAGE
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 / action bar | — |
RegionAdapter | sintetico per-chunk | con require_worldguard off resta usabile; un bridge WorldGuard porta regioni e tag reali |
EconomyAdapter | ledger interno (sporco/pulito) | un bridge Open Bank lo sostituisce |
CompanyAdapter | no-op | il racket degrada: /racket imponi non trova aziende |
AuthorityAdapter | per permessi (fascicolo sintetico) | un bridge Open FDO apre fascicoli reali e collega le scoperte |
Comandi
Il permesso Bukkit (opencrime.use) abilita solo l'uso del comando: l'autorità reale viene dalle capability del grado. opencrime.admin bypassa i controlli per lo staff.
| Comando | Funzione |
|---|---|
/syndicate | fonda, info, invita, accetta, espelli, promuovi, degrada, scioglie, chat, treasury |
/territory | claim, stato, mappa, abbandona |
/produce | avvia <ricetta> [fase], stato, raccogli, annulla |
/traffic | avvia <rotta>, consegna, stato, accordo, log |
/launder | avvia <metodo> <importo>, stato, storico |
/racket | imponi, lista, incassa, escalation, revoca, accetta, rifiuta |
/denuncia · /informatore | i due comandi di scoperta del core |
/opencrime | status, reload |
API pubblica
Recupera OpenCrimeApi dal Services Manager di Bukkit. È il registro centrale dell'illegalità, ma le autorità leggono gli eventi di un'org solo passando un dossierId collegato a scoperte reali.
OpenCrimeApi api = Bukkit.getServicesManager().load(OpenCrimeApi.class);
// Registra il tuo bridge (es. Open Bank) come economy adapter
api.adapters().setEconomy(myBankBridge);
// Il core sa cos'è illegale; la config decide come appare
boolean illegale = api.isIllegal(item);
api.getOrgByMember(playerUuid).ifPresent(org -> { /* ... */ });
// Le FDO vedono solo gli eventi collegati a un fascicolo reale
List<CrimeEvent> visibili = api.getDiscoveredEventsByOrg("clan", dossierId);
orgs()— fondazione, membri, gradi e capabilityterritories()— controllo e contesegoods()— marca e identifica i beni illegali (NBT)registerDiscovery()/getDiscoveriesByDossier()— scoperte (il registro grezzo degli eventi non è esposto)adapters()— sostituzione runtime di economy, company, authority, regiongetDiscoveredEventsByOrg(org, dossier)— accesso FDO, solo con fascicolo
Sicurezza e neutralità
- Il core non contiene il nome di nessuna sostanza, organizzazione reale o metodo: tutto in config
- Nessun heat: la pressione investigativa nasce solo da azioni RP concrete
- Gli eventi criminali sono privati finché una Discovery non li collega a un fascicolo
- Storage durevole: scrittura atomica con backup, recupero da write interrotti
- Non punisce automaticamente: registra e abilita, mai esegue
- Non crasha se un adapter manca: disattiva in silenzio la feature collegata