minecraft
Skapa ett grundblock med Forge
Sök…
Introduktion
Att skapa ett enkelt, dekorativt block med Forge är en av de första uppgifterna en strävande modder måste lära sig. Hur man gör det har förändrats i 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.
Anmärkningar
Om något går fel och ditt anpassade block (antingen när det placeras eller hålls) har en saknad struktur (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 block som är problemet, kommentera varje block och objekt som du vet fungerar, minska fellistan 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).
Blockklassen
Först behöver vi en klass som representerar blocket
public class CustomBlock extends Block {
public CustomBlock () {
super(Material.ROCK);
setHardness(1.0f);
setHarvestLevel("pickaxe", 0);
setResistance(1.0f);
setCreativeTab(CreativeTabs.DECORATIONS);
this.setSoundType(SoundType.STONE);
}
}
Även här finns det flera modifieringar tillgängliga: material (som styr vissa egenskaper som att kunna skjutas av kolvar och om det kan brytas för hand), hårdhet (hur lång tid det tar att bryta), skördenivå (lämpligt verktyg och verktyg material: i detta fall träpax), motstånd (mot explosioner), fliken den visas i den kreativa menyn och vilket stegljud det har.
Det är hit alla snygga funktionalitetsblock kommer att behöva gå, men för tillfället gör vi ett block som bara ser bra ut, så vi är klara.
Blockmodellen JSON
Nästa måste vi berätta för Minecraft hur vi vill att vårt block ska se ut.
{
"parent": "block/cube_all",
"textures": {
"all": "example:blocks/decorative"
}
}
Det är ganska mycket allt som behövs för att det ska fungera när blocket 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).
Namnge modellen JSON-filen my_block.json
(matchar registernamnet vi kommer att ge den senare) och spara den på src\main\resources\assets\example\models\block\
(där example
är mod-ID som anges i @Modantotering av din huvudmodklasse).
Blockmodellen här använder en förälder till block / cube_all, vilket innebär att den enda levererade strukturen kommer att användas på alla ansikten. Det finns andra standardmodeller också, till exempel:
- block / kub (alla sex ansikten tilldelas oberoende)
- block / cube_bottom_top (topp- och bottenytor oberoende av sidorna)
- block / orienterbar (riktning mot block, t.ex. ugn)
- block / kors (blommor, högt gräs)
- block / gröda (vete, morötter)
Observera att varje modell anger de strukturer som den använder med ett namn-ID (t.ex. "all"
eller "top"
). Titta på föräldermodellen för att avgöra vad dessa namn är om du är osäker. Felaktigt angivna strukturer kan leda till att texturproblem som saknas fel rapporteras .
Det är också möjligt att skapa en helt anpassad modell eller skapa en anpassad överordnad modell. Men för tillfället räcker det.
Glöm inte att skapa en struktur, namnge den decorative.png
(eftersom det är vad JSON-filen angav) och spara den på src\main\resources\assets\example\textures\blocks\
Blockera registrering
Registrering av block görs från din huvudmodklasse, eller en ModBlocks-klassmetod som anropas från huvudmodklassen under preInit.
Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);
Det finns ett viktigt skäl att använda block.setUnlocalizedName(block.getRegistryName().toString());
också! Det säkerställer att ditt block (och objekt) olokaliserade namn innehåller mod-ID för att undvika konflikter mellan språkfiler.
Åh du vill ha en artikelversion också så att den kan existera i ditt lager också? Det har skapats separat post 1.7.10 och gjort så:
ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);
Lägg märke till att vi sätter ItemBlocks registernamn till samma sträng som vårt block. Så här smidar och matchar block mot deras ItemBlock-motsvarighet och vice versa.
Men vänta, det finns mer!
Ditt block kan ha en artikelform , men det objektet har ingen modell eller struktur ännu! Modeller registreras automatiskt för block, men inte föremål. Detta kan bara ringas från Client Proxy och täcker inte block med varianter (som ull eller löv).
ModelLoader.setCustomModelResourceLocation(
ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));
Generellt sett behöver du inte heller en objektmodell JSON eftersom Forge och vanilj kommer att falla tillbaka på blockets modell istället, men detta är inte alltid fallet. Om du upptäcker att du behöver en objektmodell JSON, ska du bara överföra den till ditt block JSON och spara den på src\main\resources\assets\example\models\item\
med samma filnamn som blockets registernamn.
{
"parent": "example:block/my_block"
}