Sök…


Introduktion

Att skapa ett enkelt objekt med Forge är en av de första uppgifterna som en strävande modder måste lära sig. Hur man gör det har förändrats över de olika versionerna av Minecraft och är förmodligen på en "måttlig" svårighetspost 1.7.10 på grund av det stora antalet lätt att göra misstag, särskilt när det gör att det görs ordentligt.

Anmärkningar

Om något går fel och din anpassade artikel har en saknad textur (svart / lila) eller modell (standardkub som är för stor när den hålls) kontrollerar du loggen. Problem av den här typen dyker nästan alltid upp i loggen, förutsatt att du har registrerat saker korrekt.

Det första som kommer att dyka upp är "Exception loading model for variant..." linje eller liknande, som säger dig vilket block eller objekt som inte kunde laddas ordentligt. Efter ett tiotal rader som börjar med at... kommer en annan rad att börja Caused by...

Denna "orsakad av" linje är den viktiga, den kommer att säga dig vilken fil som inte kunde laddas ordentligt och kan vara ett av flera fel, till exempel:

  • Felaktig JSON (din JSON-fil är inte giltig och har en skrivfel)
  • Filen hittades inte (filen som Minecraft letar efter är inte korrekt namngivna eller på rätt plats)
  • Manglande variantundantag (din Blockstate JSON är ofullständig)

Du kan till och med få fler än ett fel som uppstår för ett enda misstag! Om du inte vet vilket objekt som är problemet, kommentera varje block och objekt som du vet fungerar, minska fellistan ner till blocket (eller block) i fråga. Du kanske måste göra detta flera gånger.

Dessutom visas en blandningstextur lika annorlunda som en enkel lista över alla saknade resurser för en given domän (mod ID).

Produktklass

Den här delen har inte förändrats mycket mer än versionerna av Minecraft, även om det har funnits några mutationer i exakta metodsignaturer och klasshierarki. En grundläggande artikel (en som inte har någon funktionalitet, till exempel en pinne eller göt: det stämmer, båda är ingenting!)

public class CustomItem extends Item {

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

Inte mycket utrymme för anpassning just nu, till skillnad från block. Om allt vi kan göra är att ändra om objektet kan skada eller inte (verktyg använder det här) och vilken kreativ flik det kommer att finnas i. Namn och textur vi ska hantera när vi registrerar objektet i GameRegistry.

Detta är dock allt som behövs för att hålla, bära, släppa, hantla, smälta och på annat sätt använda föremålet. Vissa artiklar i Minecraft (som pinnar) har inte ens en unik klass och använder helt enkelt en new Item() . Vi kan göra det här, men alla objekt med ytterligare funktionalitet behöver en klass.

Objektmodell

Precis som med block behöver objekt också modeller.

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

Det är ganska mycket allt som behövs för att det ska fungera när objektet har registrerats. Det enda viktiga är att filnamnet matchar registernamnet som används för att registrera blocket och ska vara i alla små bokstäver (1.11+ filnamn måste vara små bokstäver, innan det bara är skiftlägeskänsligt).

Observera att "lager0" är den enda textur som behövs och det är mycket osannolikt att någon annan textur kommer att specificeras alls (även om vissa föremål som drycker och läder rustning har "lag1"). Alla namn definieras av item/builtin (den interna högsta item/builtin för objekt) till skillnad från block.

Namnge modellen JSON-filen my_item.json (matchar registernamnet vi kommer att ge den senare) och spara den på src\main\resources\assets\example\models\item\ (där example är mod-ID som anges i @Modantotering av din huvudmodklasse).

Skapa dessutom en struktur för ditt objekt, namnge det basic.png och spara det i src\main\resources\assets\example\textures\items\

Objektmodellen här använder en förälder till objektet / genererat, vilket innebär att den enskilda medföljande strukturen kommer att användas (som för de flesta objekt som inte är blockerade) och kommer att hållas i spelarens hand i en standardorientering. Det finns också objekt / handhållare som anger olika visningsorienteringar (för verktyg). Objekt kan också leverera sitt eget "display" -attribut, vilket åsidosätter de från föräldern, men behövs inte i 99,9% av användningarna.

Objektregistrering

Registrering av objekt görs från din huvudmodklasse, eller en ModItems-klassmetod som anropas från huvudmodklassen under preInit.

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

Det finns ett viktigt skäl att använda item.setUnlocalizedName(item.getRegistryName().toString()); också! Det säkerställer att ditt objekts olokaliserade namn innehåller mod-ID för att undvika konflikt mellan språkfiler mellan moderna.

Nu behöver artikeln också en modell, och det är här saker som fick svårt post 1.7.10, som bara innebar att Minecraft berättade namnet på strukturen som skulle laddas och kan specificeras i artikelns konstruktör.

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;
        }
    });

Observera att det här avsnittet endast måste vara placerat på klientsidan (dvs. klientproxy) eftersom många av de referenser klasserna inte finns på den dedikerade servern.

Att registrera objekt med varianter, t.ex. Saplings, måste göras på ett annat sätt med ModelLoader.setCustomModelResourceLocation(item, metadata, resourceLocation) även om det låter oss använda en Blockstate-fil för att specificera våra varianter (vilket är mycket att föredra framför alternativet). Vår artikel använder inte varianter, så vi är klara.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow