Salta ai contenuti

Lalyan Cosmetic Core



Un’API per registrare e personalizzare cosmetici senza usare gli slot dell’armatura

Modello e texture del Custom Wardrobe sono fatti da EtherealShigure.

Questo plugin permette ai giocatori di personalizzare quale cosmetico hanno equipaggiato, senza dover usare i loro slot dell’armatura

Permette anche ai creatori di plugin di creare i loro cosmetici personalizzati, senza aver bisogno di alcun codice Java!

Il plugin fornisce una GUI per personalizzare i cosmetici, che può essere aperta tramite comando o, in un modo più immersivo, interagendo con il Guardaroba Cosmetico

Il Guardaroba Cosmetico può essere craftato in una Builder’s Workbench con 4 di qualsiasi Hardwood

La GUI fornisce un modo semplice per selezionare cosmetici e varianti di cosmetici. Fai clic con il pulsante sinistro su un cosmetico per equipaggiarlo, se il cosmetico ha l’icona della variante, fai clic con il pulsante destro per aprire il menu delle varianti!

Il plugin include diversi comandi, pensati principalmente per scopi di test:

  • /cosmetic apply <Cosmetic_ID> [Override] – Applica manualmente un determinato oggetto estetico. Il parametro [Override] è opzionale (il valore predefinito è yes; l’altro valore possibile è no) e determina se tutti gli altri oggetti estetici di quel tipo debbano essere rimossi. Richiede OP.
  • /cosmetic change – Apre manualmente l’interfaccia utente (UI) per la personalizzazione degli oggetti estetici. Non richiede permessi.
  • /cosmetic list – Mostra in chat tutti gli ID degli oggetti estetici caricati. Richiede OP. Usando --permissions vengono mostrati tutti gli oggetti con i relativi permessi associati.
  • /cosmetic reload – Ricarica manualmente tutti gli oggetti estetici. Richiede OP.
  • /cosmetic clear – Rimuove tutti gli oggetti estetici personalizzati e ripristina la skin predefinita. Richiede OP.
  • /cosmetic perms <Action> <Permission_Type> <Subject_Type> <Permission> <Subject> – Controlla o modifica i permessi della mod. Richiede OP.

Questi sono i parametri utilizzati nei comandi sopra elencati.

L’ID completo dell’oggetto estetico. Usa /cosmetic list per vedere tutti gli ID disponibili.

  • add: Aggiunge un permesso.
  • remove: Rimuove un permesso.
  • check: Verifica lo stato di un permesso.
  • cosmetic: Un permesso per uno specifico oggetto estetico.
  • slot: Un permesso per uno slot (si applica a tutti gli oggetti estetici al suo interno).
  • player: Imposta il permesso per uno specifico giocatore.
  • group: Imposta il permesso per un intero gruppo.

Inserisci qui il nodo del permesso specifico.
Puoi trovare maggiori informazioni su come sono scritti i permessi qui.

  • Se Subject_Type è player: Inserisci il nome del giocatore o il suo UUID.
  • Se Subject_Type è group: Inserisci il nome del gruppo.
!Attenzione! Ricordati che il nome che dai ad i files è importante!

Registrare un cosmetico è abbastanza semplice. Dovrai creare un pacchetto di risorse (ovviamente), e avrai bisogno di 3 file essenziali:

  • Il file .blockymodel del cosmetico
  • La texture .png del cosmetico
  • L’icona .png del cosmetico, che è la stessa icona che useresti per l’oggetto!

Questi file devono essere nominati allo stesso modo, ovvero CustomID.extension

Ogni cosmetico avrà la sua cartella, con questa struttura

CustomID/
├── CustomID.blockymodel
├── CustomID.png
└── Icon/
└── CustomID.png

La cartella del cosmetico andrà messa all’interno di una certa cartella, a seconda del tipo di cosmetico:

Il percorso base per i cosmetici è Common/Resources/ (le cartelle Common/Resources/Cosmetics e Common/Resources/Characters anche sono controllate, per compatibilità con versioni vecchie), seguito dalla cartella basata sullo slot, che può essere:

  • Capes
  • Ears_Accessories
  • Face_Accessories
  • Gloves
  • Head
  • Overpants
  • Overtops
  • Pants
  • Shoes
  • Undertops
  • Underwears
  • Beards
  • Ears
  • Eyebrows
  • Eyes
  • Faces
  • Mouth
  • Haircuts
  • Hair_Extension
  • Wings
  • Tails
  • Horns
  • Face_Details

Scegli quale di questi slots deve occupare il tuo cosmetico e inserisci la cartella che hai creato prima.

Quindi, per un cosmetico chiamato Custom_Cape, che si trova nello slot Capes, il percorso sarà questo:

Common/Resources/Cosmetics/Capes/Custom_Cape, e all’interno della cartella Custom_Cape:

Custom_Cape/
├── Custom_Cape.blockymodel
├── Custom_Cape.png
└── Icon/
└── Custom_Cape.png

Lo slot Hair_Extension prende automaticamente il gradiente del’acconciatura.

!Attenzione! Varianti e colori si escludono a vicenda!
!Attenzione! Le estensioni per i capelli (Hair_Extension) non possono avere varianti ne colori, cambiano a seconda del taglio di capelli!

Questa API ti consente anche di aggiungere delle varianti.

Per aggiungerle le varianti dovrai aggiungere le textures e le icone delle varianti all’interno della cartella del tuo cosmetico.

Le textures delle varianti devono essere messe nella cartella del cosmetico (CustomID) nominate come segue:

CustomID_Variant_NomeVariante.png

Le icone delle varianti devono avere lo stesso nome che abbiamo dato alla texture della variante ma a differenza di essa andranno messe dentro la cartella Icon/.

Facendo un esempio con il Propeller_Hat:

Propeller_Hat/
├── Propeller_Hat.blockymodel
├── Propeller_Hat.png
├── Propeller_Hat_Variant_Circo.png
├── Propeller_Hat_Variant_Arcobaleno.png
└── Icon/
├── Propeller_Hat.png
├── Propeller_Hat_Variant_Circo.png
└── Propeller_Hat_Variant_Arcobaleno.png

Facendo così l’API caricherà: Propeller_Hat, Propeller_Hat_Variant_Circo, * Propeller_Hat_Variant_Arcobaleno*.

Saranno viste dall’API come varianti dello stesso cosmetico quindi implicitamente useranno Propeller_Hat.blockymodel come modello.

!Attenzione! Varianti e colori si escludono a vicenda!
!Attenzione! Le estensioni per i capelli (Hair_Extension) non possono avere varianti ne colori, cambiano a seconda del taglio di capelli!

Questa API ti permette anche di aggiungere più colori a un cosmetico!

Per aggiungere colori devi cambiare la cartella del tuo cosmetico così: Cosmetic_Id_Colors_GRADIENTSET

La texture dev’essere una scala di grigi (completamente desaturata)

ecco una lista di tutti i set di gradienti disponibili:

  • Colored_Cotton
  • Eyes_Gradient
  • Faded_Leather
  • Fantasy_Cotton
  • Fantasy_Cotton_Dark
  • Flashy_Synthetic
  • Hair
  • Jean_Generic
  • Ornamented_Metal
  • Pastel_Cotton
  • Rotten_Fabric
  • Shiny_Fabric
  • Skin

Ecco un esempio:

Nome oggetto: Sample_Shirt Alternativa: Colors Set Gradiente: Colored_Cotton

Il nome cartella è: Sample_Shirt_Colors_Colored_Cotton

La struttura delle cartelle è:

Sample_Shirt_Colors_Colored_Cotton/
├── Sample_Shirt.blockymodel
├── Sample_Shirt.png
└── Icon/
└── Sample_Shirt.png

I nomi di modello, texture e icona devono essere solo il nome senza _Colors_GRADIENTSET

All’interno della cartella del tuo cosmetico, puoi aggiungere un file CustomID.json (in cui CustomID è l’ID del tuo cosmetico). Questo file ti permetterà di personalizzare ancora di più i tuoi cosmetici.

All’interno del file JSON puoi cambiare il nome e il percorso del modello, della texture e dell’icona del tuo cosmetico. E non è tutto, potrai anche definire varianti o colorazioni del tuo cosmetico e decidere se occupa SLOT MULTIPLI!

Qui la formattazione corretta del cosmetico di esempio

{
"Model": "Resources/Cosmetics/Head/Propeller_Hat/Propeller_Hat.blockymodel",
"Texture": "Resources/Cosmetics/Head/Propeller_Hat/Propeller_Hat.png",
"Icon": "Resources/Cosmetics/Head/Propeller_Hat/Propeller_Hat_Icon.png",
"Slot_overrides": [
//Inserisci gli slot qui, per esempio "Head", "Capes" ecc...
],
"Alternatives": {
//QUESTI 2 SONO MUTUALMENTE ESCLUSIVI, O USI LE VARIANTI O I COLORI!!!
//Scelta 1 (Colori)
"Gradient_Set": "Hair",
//Scelta 2 (Varianti)
"Variants": {
"Variant": {
"Texture": "Resources/Cosmetics/Head/Propeller_Hat/Variant/Variant.png",
"Icon": "Resources/Cosmetics/Head/Propeller_Hat/Variant/Variant_Icon.png"
}
}
},
"Default_Color": {
"Gradient_Set": "Hair",
"Gradient_Id": "Red"
}
}

“Model” È il percorso del modello di cosmetico base ed eventuali varianti.

“Texture” È il percorso della texture di cosmetico base ed eventuali varianti.

“Icon” È il percorso dell’icona del cosmetico base.

“Alternatives” Definisce che il cosmetico ha 1 di 2 stili di alternative

“Default_Color” Se il cosmetico utilizza texture in bianco e nero, definisce il colore equipaggiato dallo slot principale

“Alternatives” >“Variants” Annuncia la presenza di varianti che saranno elencate.

“Alternatives” >“Variants” > “Variant1Name” Andrà sostituito con il nome della prima variante.

“Alternatives” >“Variants” > “Variant2Name” Andrà sostituito con il nome della seconda variante.

Dentro i nomi delle varianti qui sopra citati ci sono le definizioni dei componenti della variante.

“Alternatives” >“Variants” > “VariantName” > “Texture” È il percorso della texture della variante in questione.

“Alternatives” >“Variants” > “VariantName” > “Icon” È il percorso dell’icona della variante in questione.

“Alternatives” > “Gradient_Set” Il gradiente di colorazioni da usare

Lista dei gradienti:

  • Colored_Cotton
  • Eyes_Gradient
  • Faded_Leather
  • Fantasy_Cotton
  • Fantasy_Cotton_Dark
  • Flashy_Synthetic
  • Hair
  • Jean_Generic
  • Ornamented_Metal
  • Pastel_Cotton
  • Rotten_Fabric
  • Shiny_Fabric
  • Skin

Dalla versione 2.0, hai anche modo di creare categorie (I bottoni più a sinistra) e Slot (I bottoni a centro-sinistra).

Le categorie sono puramente cosmetiche, mentre gli slot sono anche usabili nei cosmetici

Schema json Categoria:

{
"Name": "Capes"
}

Name: Il nome da mostrare, usato anche nell’assegnazione ad uno slot, ACCETTA SOLO LETTERE GRANDI E PICCOLE, NIENTE NUMERI O CARATTERI SPECIALE

Schema json Slot:

{
"Name": "Capes",
"Icon": "UI/Custom/Common/Categories/Categories/Capes.png",
"SelectedIcon": "UI/Custom/Common/Categories/Categories/Selected/Capes.png",
"TopLevelCategory": "Capes",
"Camera": {
"Distance": 2,
"Position_Offset": {
"X": 0.0,
"Y": -0.3,
"Z": 0.0
},
"LookAtBack": true
},
"CanVanish": true
}

Name: Il nome da mostrare, usato anche nell’assegnazione ad un cosmetico, ACCETTA SOLO LETTERE GRANDI E PICCOLE, NIENTE NUMERI O CARATTERI SPECIALE
Icon: L’icona del bottone
SelectedIcon: L’icona del bottone quando lo slot è selezionato
TopLevelCategory: La categoria del bottone (Vedi sopra)
Camera: Le impostazioni della camera quando selezioni lo slot
CanVanish: Se lo slot ha un bottone di scomparsa (Lo slot “Faces” è l’unico che lo ha a false)

i permessi si abilitano dal file di configurazione.

I permessi sono formati così: lalyancosmeticcore.[CAMPO].[ID].[AZIONE]

Se non usi luckperms la mod userà in automatico il sistema di permessi vanilla.

Se usi luckperms la mod userà in automatico il sistema di permessi di luckperms.

I campi sono gruppi di permessi.

il campo cosmetic serve a ottenere i permessi per un cosmetico specifico.

È scritto così: lalyancosmeticcore.cosmetic.[ID_Cosmetico].[AZIONE].

Alcuni esempi:

lalyancosmeticcore.cosmetic.GoodWitchLalya:ExampleCosmetics#Propeller_Hat.use
lalyancosmeticcore.cosmetic.GoodWitchLalya:ExampleCosmetics#Rainbow_Shirt.use

Se vuoi sapere com’è scritto un permesso per un cosmetico specifico puoi usare /cosmetic list --permissions per ottenere una lista di tutti i permessi.

Il campo slot serve a ottenere i permessi per uno slot specifico e tutti i suoi cosmetici.

È scritto così: lalyancosmeticcore.slot.[ID_Slot].[AZIONE].

Alcuni esempi:

lalyancosmeticcore.slot.Head.use
lalyancosmeticcore.slot.Overpants.use

La lista con tutti gli slot: Qui(parti del personaggio), Qui(cosmetici)

Al momento c’è solo un’azione, use.

Questo permesso decide se un giocatore può vedere e impostare un cosmetico o vedere uno slot.

Al momento il file di configurazione ha solo la voce Enable Permissions.

La configurazione per il valore Enable Permissions funziona così:

Se il valore è true:
Il sistema di permessi sarà abilitato lasciando usare un cosmetico solo se si ha il permesso giusto.

Se il valore è false:
L’API funzionerà come sempre: Tutti possono usare tutto.

Questo valore è impostato su false di default.


Progetto rilasciato sotto licenza GNU AGPLv3.