🇬🇧 English
🇬🇧 English
Appearance
🇬🇧 English
🇬🇧 English
Appearance
This page is written for version:
1.21.4
This page is written for version:
1.21.4
Op deze pagina maak je kennis met enkele belangrijke concepten met betrekking tot voorwerpen, en hoe je ze kunt registreren, texturen, modelleren en benoemen.
Als je het nog niet wist: alles in Minecraft wordt opgeslagen in registers, en voorwerpen vormen daarop geen uitzondering.
Om de registratie van items te vereenvoudigen, kunt u een methode maken die een exemplaar van een item en een string-ID accepteert.
Met deze methode wordt een item gemaakt met de opgegeven identificatie en wordt dit geregistreerd bij het voorwerpregister van het spel.
Je kunt deze methode het beste in een soort klasse genaamd ModVoorwerpen
(of wat je het ook wilt noemen) zetten.
Mojang doet dit ook voor hun voorwerpen! Neem maar eens een kijkje naar de Items
klasse voor inspiratie.
public class ModItems {
public static Item register(Item item, RegistryKey<Item> registryKey) {
// Register the item.
Item registeredItem = Registry.register(Registries.ITEM, registryKey.getValue(), item);
// Return the registered item!
return registeredItem;
}
Je kunt nu een voorwerp registreren met de methode.
De voorwerpconstructor neemt een exemplaar van de Items.Settings
klasse als een parameter. Met deze klasse kun je de eigenschappen van het voorwerp configureren via verschillende bouwermethodes.
TIP
If you want to change your item's stack size, you can use the maxCount
method in the Items.Settings
/FabricItemSettings
class.
Dit werkt niet als je het item als beschadigbaar hebt gemarkeerd, omdat de stapelgrootte voor beschadigbare items altijd 1 is om duplicatie-exploits te voorkomen.
public static final RegistryKey<Item> SUSPICIOUS_SUBSTANCE_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, "suspicious_substance"));
public static final Item SUSPICIOUS_SUBSTANCE = register(
new Item(new Item.Settings().registryKey(SUSPICIOUS_SUBSTANCE_KEY)),
SUSPICIOUS_SUBSTANCE_KEY
);
Als je echter in het spel gaat, kun je zien dat ons item niet bestaat! Dit komt omdat u de klasse niet statisch initialiseert.
Om dit te doen, kunt u een openbare statische initialisatiemethode aan uw klasse toevoegen en deze vanuit uw klasse ModInitializer
aanroepen. Momenteel heeft deze methode niets nodig.
public static void initialize() {
}
public class FabricDocsReferenceItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}
Het aanroepen van een methode voor een klasse initialiseert deze statisch als deze nog niet eerder is geladen - dit betekent dat alle static
velden worden geëvalueerd. Dit is waar de dummy initialize
voor is.
INFO
Als je het item wilt toevoegen aan een aangepaste ItemGroup
, ga dan naar de pagina Aangepaste Voorwerpgroepen voor meer informatie.
We zullen dit item bijvoorbeeld toevoegen aan de ingrediënten ItemGroup
, u zult de voorwerpgroepgebeurtenissen van Fabric API moeten gebruiken - met name ItemGroupEvents.modifyEntriesEvent
Dit kan gedaan worden in de initialize
-methode van uw voorwerpen klasse.
// 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));
Als je het spel inlaadt, kun je zien dat ons item is geregistreerd en zich in de voorwerpgroep Ingrediënten bevindt:
Echter mist het het volgende:
Momenteel heeft het voorwerp geen vertaling, dus je zult er een moeten toevoegen. De vertaalsleutel is al door Minecraft verstrekt: item.mod_id.suspicious_substance
.
Maak een nieuw JSON-bestand in: src/main/resources/assets/<mod id here>/lang/nl_nl.json
(en_us.json
voor Engels) en plaats de vertaalsleutel en de waarde ervan:
{
"item.mod_id.suspicious_substance": "Suspicious Substance"
}
Je kunt het spel opnieuw starten of je mod bouwen en op F3 + T drukken om de wijzigingen toe te passen.
Om je voorwerp een textuur en model te geven, maak je eenvoudig een textuurafbeelding van 16x16 pixels voor uw item en slaat u deze op in de map assets/<mod id here>/textures/item
. Geef het textuurbestand dezelfde naam als de ID van het voorwerp, maar met de extensie .png
.
Je kunt deze voorbeeldtextuur bijvoorbeeld gebruiken voor suspicious_substance.png
Bij het herstarten/herladen van het spel zou je moeten zien dat het voorwerp nog steeds geen textuur heeft, dat komt omdat je een model moet toevoegen dat deze textuur gebruikt.
Je gaat een eenvoudig item/generated
-model maken, dat een invoertextuur bevat en niets anders.
Maak de model-JSON in de map assets/<mod id here>/models/item
, met dezelfde naam als het item; suspicious_substance.json
Not Found: /home/runner/work/fabric-docs/fabric-docs/reference/latest/src/main/resources/assets/fabric-docs-reference/models/item/suspicious_substance.json
parent
: Dit is het ouder model wat dit model van zal erven. In dit geval is het het item/generated
-model.textures
: Dit is waar je de texturen voor het model definieert. De layer0
-sleutel is de textuur wat het voorwerpmodel zal gebruiken.De meeste voorwerpen zullen item/generated
als ouder hebben, omdat het een eenvoudig model is wat alleen maar de textuur weergeeft.
Er zijn alternatieven, zoals item/handheld
, wat gebruikt wordt voor voorwerpen die vastgehouden worden in de spelers handen, zoals gereedschappen.
Je voorwerp moet er nu zo uitzien in het spel:
Fabric API biedt verschillende registers die kunnen worden gebruikt om extra eigenschappen aan je voorwerp toe te voegen.
Als je je voorwerp bijvoorbeeld composteerbaar wilt maken, kun je het CompostableItemRegistry
gebruiken:
// 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);
Als je van je voorwerp een brandstof wilt maken, kun je ook de klasse FuelRegistry
gebruiken:
// 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);
});
Als u een recept voor uw item wilt toevoegen, moet u een JSON-receptbestand in de map data/<mod id here>/recipe
plaatsen.
Voor meer informatie over het receptformaat kunt u deze bronnen raadplegen:
Als je wilt dat je voorwerp een aangepaste tooltip heeft, moet je een klasse maken die Item
uitbreidt en de methode appendTooltip
overschrijft.
INFO
In dit voorbeeld wordt de klasse LightningStick
gebruikt die is gemaakt op de pagina Aangepaste Voorwerpinteracties.
@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));
}
Elke aanroep van add()
zal één regel aan de tooltip toevoegen.