🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
This page is written for:
1.21
This page is written for:
1.21
Questa pagina ti presenterà alcuni concetti chiave legati agli oggetti, e come registrargli e aggiungere loro texture, modello e nome.
Se non ne sei al corrente, tutto in Minecraft è memorizzato in registry, e gli oggetti non fanno eccezione.
Per semplificare la registrazione degli oggetti, puoi creare un metodo che accetta un'istanza di un oggetto e una stringa come identificatore.
Questo metodo creerà un oggetto con l'identificatore fornito e lo registrano nella registry degli oggetti del gioco.
Puoi mettere questo metodo in una classe chiamata ModItems
(o qualsiasi altro nome).
Anche Mojang fa lo stesso per i suoi oggetti! Prendi ispirazione dalla classe Items
.
public class ModItems {
public static Item register(Item item, String id) {
// Create the identifier for the item.
Identifier itemID = Identifier.of(FabricDocsReference.MOD_ID, id);
// Register the item.
Item registeredItem = Registry.register(Registries.ITEM, itemID, item);
// Return the registered item!
return registeredItem;
}
Puoi ora registrare un oggetto con il metodo.
Il costruttore dell'oggetto prende come parametro un'istanza della classe Items.Settings
. Questa classe ti permette di configurare le proprietà dell'oggetto con vari metodi costruttori.
TIP
If you want to change your item's stack size, you can use the maxCount
method in the Items.Settings
/FabricItemSettings
class.
Questo non funzionerà se hai segnato un oggetto come danneggiabile, poiché la dimensione di uno stack è sempre 1 per oggetti danneggiabili per evitare duplicazioni.
public static final Item SUSPICIOUS_SUBSTANCE = register(
new Item(new Item.Settings()),
"suspicious_substance"
);
Tuttavia, se vai nel gioco, non troverai l'oggetto! Questo perché non hai inizializzato la classe staticamente.
Per fare questo, puoi aggiungere un metodo di inizializzazione pubblico e statico alla tua classe e richiamarlo dalla classe ModInitializer
. Per ora il metodo non deve contenere nulla.
public static void initialize() {
}
public class FabricDocsReferenceItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}
Chiamare un metodo su una classe la inizializza staticamente se non è mai stata caricata prima - questo significa che tutti gli attributi static
vengono calcolati. Questo è il motivo di questo metodo initialize
fasullo.
INFO
Se volessi aggiungere l'oggetto a un ItemGroup
personalizzato, controlla la pagina Gruppi di Oggetti Personalizzati per maggiori informazioni.
Per questo esempio, aggiungeremo questo oggetto all'ItemGroup
ingredienti, dovrai usare gli eventi dei gruppi di oggetti dell'API di Fabric - in particolare ItemGroupEvents.modifyEntriesEvent
Questo si può fare nel metodo initialize
della tua classe degli oggetti.
// Get the event for modifying entries in the ingredients group.
// And register an event handler that adds our suspicious item to the ingredients group.
ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS)
.register((itemGroup) -> itemGroup.add(ModItems.SUSPICIOUS_SUBSTANCE));
Appena caricato il gioco, vedrai che il nostro oggetto è stato registrato, ed è nel gruppo di oggetti Ingredienti:
Tuttavia, gli manca il seguente:
L'oggetto per ora non ha una traduzione, per cui dovrai aggiungerne una. La chiave di traduzione è già stata fornita da Minecraft: item.mod_id.suspicious_substance
.
Crea un nuovo file JSON presso: src/main/resources/assets/<mod id here>/lang/en_us.json
e mettici la chiave di traduzione, e il suo valore:
{
"item.mod_id.suspicious_substance": "Suspicious Substance"
}
Puoi riavviare il gioco, o ricostruire la tua mod e premere F3 + T per applicare le modifiche.
Per dare al tuo oggetto una texture e un modello, ti basta creare un'immagine 16x16 come texture per il tuo oggetto e salvarla nella cartella assets/<mod id here>/textures/item
. Il nome del file è l'identificatore dell'oggetto, con estensione .png
.
Per questo esempio, puoi usare questa texture di esempio per suspicious_substance.png
Appena riavviato/ricaricato il gioco - dovresti vedere che l'oggetto ancora non ha texture, questo perché devi aggiungere un modello che usi questa texture.
Creeremo un semplice modello item/generated
, che prende come input solo una texture.
Crea il modello JSON nella cartella assets/<mod id here>/models/item
, con lo stesso nome dell'oggetto; suspicious_substance.json
{
"parent": "item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/suspicious_substance"
}
}
parent
: Questo è il modello genitore da cui questo modello erediterà. In questo caso è il modello item/generated
.textures
: Qui è dove definisci le texture per il modello. La chiave layer0
è la texture che il modello userà.La maggior parte degli oggetti usa il modello item/generated
come genitore, perché è un modello semplice che mostra semplicemente la texture.
Ci sono alternative, tra cui item/handheld
che si usa per oggetto da tenere nella mano del giocatore, come gli strumenti.
Il tuo oggetto dovrebbe ora avere questo aspetto nel gioco:
L'API di Fabric fornisce varie registry che si possono usare per aggiungere altre proprietà al tuo oggetto.
Per esempio, per rendere il tuo oggetto compostabile, puoi usare la CompostableItemRegistry
:
// Add the suspicious substance to the composting registry with a 30% chance of increasing the composter's level.
CompostingChanceRegistry.INSTANCE.add(ModItems.SUSPICIOUS_SUBSTANCE, 0.3f);
In alternativa, se vuoi rendere il tuo oggetto combustibile, puoi usare la classe FuelRegistry
:
// Add the suspicious substance to the registry of fuels, with a burn time of 30 seconds.
// Remember, Minecraft deals with logical based-time using ticks.
// 20 ticks = 1 second.
FuelRegistry.INSTANCE.add(ModItems.SUSPICIOUS_SUBSTANCE, 30 * 20);
Se vuoi aggiungere una ricetta per il tuo oggetto, devi posizione un file JSON della ricetta nella cartella data/<mod id here>/recipe
.
Per maggiori informazioni sul formato delle ricette, controlla queste risorse:
Se vuoi che il tuo oggetto abbia un tooltip personalizzato, dovrai creare una classe che estenda Item
e faccia override del metodo appendTooltip
.
INFO
Questo esempio usa la classe LightningStick
creata nella pagina Interazioni Personalizzate tra Oggetti.
@Override
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
tooltip.add(Text.translatable("itemTooltip.fabric-docs-reference.lightning_stick").formatted(Formatting.GOLD));
}
Ogni chiamata di add()
aggiungerà una linea al tooltip.