Zoeken…


Invoering

Een eenvoudig item maken met Forge is een van de eerste taken die een aspirant-modder moet leren. Hoe dat te doen is veranderd in de verschillende versies van Minecraft en bevindt zich waarschijnlijk op een "matige" moeilijkheidsgraad na 1.7.10 vanwege het grote aantal eenvoudig te maken fouten, met name met het correct weergeven ervan.

Opmerkingen

Als er iets misgaat en uw aangepaste item een ontbrekende textuur (zwart / paars) of model (standaard kubus die te groot is wanneer vastgehouden) heeft, controleert u het logboek. Dit soort problemen zal bijna altijd in het logboek verschijnen, op voorwaarde dat u dingen correct hebt geregistreerd.

Het eerste dat zal verschijnen is de regel "Exception loading model for variant..." of iets dergelijks, dat aangeeft welk blok of item niet correct kon worden geladen. Na een tiental regels beginnend met at... komt er weer een regel die Caused by...

Deze regel 'Veroorzaakt door' is de belangrijkste, hij zal u vertellen welk bestand niet correct kon worden geladen en kan een van verschillende fouten zijn, zoals:

  • Onjuiste JSON (uw JSON-bestand is niet geldig en heeft een typefout)
  • Bestand niet gevonden (het bestand dat Minecraft zoekt, heeft niet de juiste naam of staat niet op de juiste plaats)
  • Ontbrekende variantuitzondering (uw Blockstate JSON is onvolledig)

U kunt zelfs meer dan één falende fout krijgen voor een enkele fout! Als je niet weet welk item het probleem is, geef dan commentaar op elk blok en item waarvan je weet dat het werkt, verminder de foutenlijst tot het blok (of de blokken) in kwestie. Mogelijk moet u dit meerdere keren doen.

Bovendien wordt een mixtextuur net zo anders weergegeven als een eenvoudige lijst met alle ontbrekende bronnen voor een bepaald domein (mod ID).

Artikelklasse

Dit deel is niet heel veel veranderd in de versies van Minecraft, hoewel er enkele mutaties zijn opgetreden in de exacte methode handtekeningen en klasse hiërarchie. Een basisitem (een item zonder functionaliteit, zoals een stok of staaf: dat klopt, beide zijn niets-doen-items!)

public class CustomItem extends Item {

    public CustomItem () {
        super();
        this.setMaxDamage(0);
        this.setCreativeTab(CreativeTabs.MISC);
    }
}

Op dit moment is er niet veel ruimte voor aanpassing, in tegenstelling tot blokken. Alles wat we kunnen doen is veranderen of het item schade kan oplopen (tools gebruiken dit) en in welk creatief tabblad het zal staan. Naam en textuur zullen we behandelen wanneer we het item registreren bij GameRegistry.

Dit is echter alles dat nodig is om het artikel vast te houden, te dragen, te laten vallen, te vervaardigen, te smelten en anderszins te gebruiken. Sommige items in Minecraft (zoals sticks) hebben niet eens een unieke klasse en gebruiken gewoon new Item() . We kunnen dat hier doen, maar elk item met extra functionaliteit heeft een klasse nodig.

Artikelmodel

Net als bij blokken hebben items ook modellen nodig.

{
    "parent": "item/generated",
    "textures": {
        "layer0": "example:items/basic"
    }
}

Dat is zo ongeveer alles wat nodig is om te werken zodra het item is geregistreerd. Het enige belangrijke is dat de bestandsnaam overeenkomt met de registernaam die wordt gebruikt om het blok te registreren en in kleine letters moet zijn (1.11+ bestandsnamen moeten kleine letters zijn, voordat deze alleen hoofdlettergevoelig zijn).

Merk op dat "layer0" de enige textuur is die nodig is en het is zeer onwaarschijnlijk dat een andere textuur überhaupt zal worden gespecificeerd (hoewel sommige items zoals drankjes en lederen harnassen wel een "layer1" hebben). Alle namen worden gedefinieerd door item/builtin (het interne bovenste bovenliggende model voor items) in tegenstelling tot blokken.

Noem het JSON-bestandsmodel my_item.json (komt overeen met de registernaam die we het later gaan geven) en sla het op bij src\main\resources\assets\example\models\item\ (waarbij example de mod-ID is opgegeven in de @Mod annotatie van uw belangrijkste mod-klasse).

Maak ook een textuur voor uw item, noem het basic.png en sla het op in src\main\resources\assets\example\textures\items\

Het itemmodel hier gebruikt een bovenliggend item / gegenereerd, wat betekent dat de enkele geleverde textuur wordt gebruikt (zoals bij de meeste niet-blokitems) en in de standaardhand van de speler wordt gehouden. Er is ook een item / handheld die verschillende weergave-oriëntaties aangeeft (voor gereedschappen). Items kunnen ook hun eigen "weergave" -kenmerk leveren, waardoor deze van het bovenliggende item worden vervangen, maar dit is niet nodig in 99,9% van de toepassingen.

Artikel registratie

Het registreren van items wordt gedaan vanuit uw hoofdmod-klasse, of een ModItems-klassenmethode die wordt aangeroepen vanuit de hoofdmod-klasse tijdens preInit.

Item item = new CustomItem();
string registryname = "my_item";
item.setRegistryName(registryname);
item.setUnlocalizedName(item.getRegistryName().toString());
GameRegistry.register(item);

Er is een belangrijke reden om item.setUnlocalizedName(item.getRegistryName().toString()); ook! Het zorgt ervoor dat de niet-gelokaliseerde naam van uw item de mod ID bevat om conflicten tussen taalbestanden tussen mods te voorkomen.

Nu heeft het item ook een model nodig, en dit is waar het moeilijk werd na 1.7.10, waarbij alleen Minecraft moest worden verteld wat de te laden textuur was en die kon worden opgegeven in de constructor van het item.

final ModelResourceLocation fullModelLocation = new ModelResourceLocation(item.getRegistryName().toString(), "inventory");
ModelBakery.registerItemVariants(item, fullModelLocation);
ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
    {
        public ModelResourceLocation getModelLocation(ItemStack stack)
        {
            return fullModelLocation;
        }
    });

Merk op dat deze sectie alleen client-side moet zijn (dwz de client-proxy) omdat veel van de klassen waarnaar wordt verwezen niet op de dedicated server bestaan.

Het registreren van items met varianten, bijv. Jonge boompjes, moet op een andere manier worden gedaan, met behulp van ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation) hoewel we hiermee een Blockstate-bestand kunnen gebruiken om onze varianten te specificeren (wat veel voorkeur heeft boven het alternatief). Ons artikel gebruikt geen varianten, dus we zijn klaar.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow