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.
Preparare la Tua Classe dei Oggetti
Per semplificare la registrazione degli elementi, è possibile creare un metodo che accetta un identificatore di stringa, alcune proprietà degli oggetti e una fabbrica per creare l'istanza Item.
Questo metodo creerà un oggetto con l'identificatore fornito e lo registrerà con il registro degli oggetti del gioco.
Puoi mettere questo metodo in una classe chiamata Moditems (o qualunque nome in cui tu voglia nominare la classe).
Anche Mojang fa lo stesso per i suoi oggetti! Prendi ispirazione dalla classe Items.
java
public class ModItems {
public static <GenericItem extends Item> GenericItem register(String name, Function<Item.Properties, GenericItem> itemFactory, Item.Properties settings) {
// Create the item key.
ResourceKey<Item> itemKey = ResourceKey.create(Registries.ITEM, Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, name));
// Create the item instance.
GenericItem item = itemFactory.apply(settings.setId(itemKey));
// Register the item.
Registry.register(BuiltInRegistries.ITEM, itemKey, item);
return item;
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Nota che stiamo usando un GenericItem, che ci permette di usare lo stesso metodo register per registrare qualsiasi tipo di oggetto che estenda Item. Stiamo anche usando un'interfaccia Function per la fabbrica, che ci consentirà di specificare come vogliamo creare il nostro articolo date le proprietà.
Registrare un Oggetto
Ora puoi registrare un oggetto con il metodo.
Il metodo di registrazione accetta un'istanza della classe Item.Properties come parametro. Questa classe ti permette di configurare le proprietà dell'oggetto con vari metodi di costruttore.
TIP
Se vuoi cambiare la dimensione di uno stack del tuo oggetto, puoi usare il metodo stacksTo dalla classe Item.Properties.
Questo non funzionerà se hai segnato un oggetto come danneggiabile, poiché la dimensione di uno stack è sempre 1 per oggetti danneggiabili per evitare duplicazioni.
java
public static final Item SUSPICIOUS_SUBSTANCE = register("suspicious_substance", Item::new, new Item.Properties());1
Item::new dice alla funzione di registrazione di creare un'istanza Item con Item.Properties chiamando il costruttore Item (new Item(...)), che accetta Item.Properties come parametro.
Tuttavia, provando ora ad eseguire il client modificato, noterai che il nostro oggetto non esiste ancora nel gioco! Questo perché non hai inizializzato la classe staticamente.
Per fare questo puoi aggiungere un metodo initialize pubblico e statico alla tua classe e richiamarlo dall'initializer della tua mod. Per ora il metodo non deve contenere nulla.
java
public static void initialize() {
}1
2
3
2
3
java
public class ExampleModItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}1
2
3
4
5
6
2
3
4
5
6
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.
Aggiungere l'Oggetto a una Scheda d'inventario
INFO
Se volessi aggiungere l'oggetto a una CreativeModeTab personalizzata, consulta la pagina Schede d'inventario personalizzate per maggiori informazioni.
Per questo esempio, aggiungeremo questo oggetto alla CreativeModeTab degli ingredienti, dovrai usare gli eventi delle schede d'inventario dall'API di Fabric - in particolare ItemGroupEvents.modifyEntriesEvent
Questo si può fare nel metodo initialize della tua classe degli oggetti.
java
// 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(CreativeModeTabs.INGREDIENTS)
.register((itemGroup) -> itemGroup.accept(ModItems.SUSPICIOUS_SUBSTANCE));1
2
3
4
2
3
4
Appena caricato il gioco, vedrai che il nostro oggetto è stato registrato, ed è nella scheda Ingredienti:

Tuttavia, gli manca il seguente:
- Modello dell'Oggetto
- Texture
- Traduzione (nome)
Dare un Nome all'Oggetto
L'oggetto per ora non ha una traduzione, per cui dovrai aggiungerne una. La chiave di traduzione è già stata fornita da Minecraft: item.example-mod.suspicious_substance.
Crea un nuovo file JSON presso: src/main/resources/assets/example-mod/lang/en_us.json e mettici la chiave di traduzione, e il suo valore:
json
{
"item.example-mod.suspicious_substance": "Suspicious Substance"
}1
2
3
2
3
Puoi riavviare il gioco, o ricostruire la tua mod e premere F3+T per applicare le modifiche.
Aggiungere un oggetto del client, una Texture e un Modello
Perché il tuo oggetto abbia l'aspetto desiderato, sono necessari:
Aggiungere una Texture
INFO
Per maggiori informazioni, vedi la pagina sui Modelli degli oggetti.
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/example-mod/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
Aggiungere un Modello
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 accetti come input solo una texture.
Crea il modello JSON nella cartella assets/example-mod/models/item, con lo stesso nome dell'oggetto; suspicious_substance.json
json
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "example-mod:item/suspicious_substance"
}
}1
2
3
4
5
6
2
3
4
5
6
Comprendere il Modello in JSON
parent: Questo è il modello genitore da cui questo modello erediterà. In questo caso è il modelloitem/generated.textures: Qui è dove definisci le texture per il modello. La chiavelayer0è 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 oggetti che il giocatore "tiene in mano", come gli utensili.
Creare l'oggetto del client
Minecraft non sa in automatico dove i file dei modelli dei tuoi oggetti si trovino, dobbiamo fornire un oggetto del client.
Crea l'oggetto del client in assets/example-mod/items, e come nome del file l'identifier dell'oggetto: suspicious_substance.json.
json
{
"model": {
"type": "minecraft:model",
"model": "example-mod:item/suspicious_substance"
}
}1
2
3
4
5
6
2
3
4
5
6
Comprendere il JSON dell'oggetto del client
model: Questa è la proprietà che contiene il riferimento al nostro modello.type: Questo è il tipo del nostro modello. Per la maggior parte degli oggetti dovrebbe essereminecraft:modelmodel: Questo è l'identifier del modello. Dovrebbe seguire questo formato:example-mod:item/item_name
Il tuo oggetto dovrebbe ora avere questo aspetto nel gioco:

Rendere l'Oggetto Compostabile o Combustibile
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 CompostingChanceRegistry:
java
// 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);1
2
2
In alternativa, se vuoi rendere il tuo oggetto combustibile, puoi usare l'evento FuelRegistryEvents.BUILD:
java
// 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.
FuelRegistryEvents.BUILD.register((builder, context) -> {
builder.add(ModItems.SUSPICIOUS_SUBSTANCE, 30 * 20);
});1
2
3
4
5
6
2
3
4
5
6
Aggiungere una Ricetta Basilare
Se vuoi aggiungere una ricetta per il tuo oggetto, devi posizione un file JSON della ricetta nella cartella data/example-mod/recipe.
Per maggiori informazioni sul formato delle ricette, consulta queste risorse:
Tooltip Personalizzati
Se vuoi che il tuo oggetto abbia un tooltip personalizzato, dovrai creare una classe che estenda Item e faccia override del metodo appendHoverText.
INFO
Questo esempio usa la classe LightningStick creata nella pagina Interazioni Personalizzate tra Oggetti.
java
@Override
public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay displayComponent, Consumer<Component> textConsumer, TooltipFlag type) {
textConsumer.accept(Component.translatable("itemTooltip.example-mod.lightning_stick").withStyle(ChatFormatting.GOLD));
}1
2
3
4
5
2
3
4
5
Ogni chiamata ad accept() aggiungerà una linea al tooltip.





