Проблема отрисовки текстуры блока

Создал 2 блока:
Код:
public static Block brickBlackClay;
public static Block brickBlueClay;

brickBlackClay = new BrickShapedBlocks().setBlockName("brick_blackClay");
brickBlueClay = new BrickShapedBlocks().setBlockName("brick_blueClay");



GameRegistry.registerBlock(brickBlueClay, "brick_blueClay");
GameRegistry.registerBlock(brickBlackClay, "brick_blackClay");

Как видно класс у блоков общий.
В этом классе я хочу, чтобы по нелокализованному имени блока, бралась своя текстура:
(весь класс BrickShapedBlocks)
Код:
package net.essenxmax.shapedblocks;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
public class BrickShapedBlocks extends Block {
 protected BrickShapedBlocks() {
  super(Material.rock);
  this.setCreativeTab(MainSB.tabShapedBlocks);
  this.setHardness(15F);
  this.setResistance(10F);
  this.setHarvestLevel("pickaxe", 3);
 
 

 }
 
 @SideOnly (Side.CLIENT)
 public void registerBlockIcon(IIconRegister iconRegister ){
  this.blockIcon = iconRegister.registerIcon(MainSB.MODID + ":" + this.getUnlocalizedName().substring(5));
 }
}

По какой-то причине текстура не отрисовывается.
Хотя если использовать:
Код:
this.setBlockTextureName("modid:texturename");
все работает отлично.

В чем может быть дело,не подскажете?
 
1,976
68
220
EssenXmax написал(а):
Код:
 @SideOnly (Side.CLIENT)
 public void registerBlockIcon(IIconRegister iconRegister ){
  this.blockIcon = iconRegister.registerIcon(MainSB.MODID + ":" + this.getUnlocalizedName().substring(5));
 }
зачем?

На тебе человеческий код:
Код:
myBlock = new BlocksDecorative("MyBlock");

public BlocksDecorative(String name) {
    this.setBlockName(name);
    this.setBlockTextureName(ModInfo.MODID + ":" + name);
}
 
Большое человеческое спасибо! А то эти туториалы весь мозг выгрызли. Нигде ничего толкового нету
 
Чтобы не создавать еще тему, напишу сюда.
Ситуация такая...
Есть рецепт крафта
Код:
GameRegistry.addShapelessRecipe(new ItemStack(MainSB.brickBlackClay, 1), new Object[] 
    {Blocks.hardened_clay,new ItemStack(MainSB.brickPattern, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(MainSB.toolChisel, 1, OreDictionary.WILDCARD_VALUE)});

В крафте использую блок
Код:
 Blocks.hardened 
, для получения
Код:
  MainSB.brickBlackClay 


но мне нужно получить именно цвет блока, который участвует в крафте,чтобы на выходе получить соответствующие ему блок из мода
[merge_posts_bbcode]Добавлено: 03.07.2016 20:11:23[/merge_posts_bbcode]

Нужно именно из черного блока глины получить blackBrickClay...не подскажете как это сделать?
 

timaxa007

Модератор
5,831
409
672
Код:
new ItemStack(Blocks.stained_hardened_clay, 1, 15)
[merge_posts_bbcode]Добавлено: 03.07.2016 20:44:54[/merge_posts_bbcode]

Код:
GameRegistry.addShapelessRecipe(new ItemStack(MainSB.brickBlackClay), new Object[] {
    new ItemStack(Blocks.stained_hardened_clay, 1, 15)
});
 
На будущее хочу разъяснить..1 это айди,если я правильно понял, а 15 что значит?
 
769
1
42
Это блок с метадатой(от 0 до 15 цвет глины). Посмотри в блоке, там будут под определенную цифру указан цвет
 
Так, понял, второе значение (15) это метадата, а первое значение (1) что означает?
 
Так и не сказали..ладно буду везде 1 оставлять,
думал,что это кол-во для крафта,но нет...
 

timaxa007

Модератор
5,831
409
672
EssenXmax, тебе написали "Размер.". Размер стака. Для рецепта (ингредиенты) без разницы сколько писать, он только для выхода нужен в данном случаи.
 
1,976
68
220
EssenXmax написал(а):
Код:
GameRegistry.addShapelessRecipe(new ItemStack(MainSB.brickBlackClay, 1), new Object[] 
    {Blocks.hardened_clay,new ItemStack(MainSB.brickPattern, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(MainSB.toolChisel, 1, OreDictionary.WILDCARD_VALUE)});
Во первых, массив в шейплесс рецептах вообще не нужен.
Во вторых, OreDictionary.WILDCARD_VALUE указывает, что подходит любая метадата и не обязателен.
В третьих, чтобы не создавать стопиццот рецептов на одну метадату её стоит вынести как переменную и указывать в айтемстаке результата И компонента.
[merge_posts_bbcode]Добавлено: 03.07.2016 22:08:21[/merge_posts_bbcode]

Первая переменная в айтемстаке - типа ID, который берётся из названия переменной предмета.
Вторая - кол-во в стаке. Обычно от 1 до 64, но есть исключения (эндерперлы по 16)
Третья - метадата. Например, цвет шерсти или краски.
 
timaxa007
Если бы написали "Размер стака", вопросов бы небыло)

AlexSocol
У меня рецепты не на одну метадату, а по одному рецепту, на каждый цвет глиняного блока
 
1,976
68
220
Ой, ну да, в смысле на один предмет с метадатой
[merge_posts_bbcode]Добавлено: 03.07.2016 23:02:38[/merge_posts_bbcode]

Просто чтобы не писать рецепт 16 раз (по кол-ву цветов) - создай цикл с переменной, от 0 до 15 и в нём регистрируй
 
Про цикл я понял, но тут есть еще одна проблема...на каждый цвет блока глины, будет разный результат крафта, то есть циклом 16 регистраций никак не сократить...
[merge_posts_bbcode]Добавлено: 04.07.2016 18:50:13[/merge_posts_bbcode]

Код:
GameRegistry.addShapelessRecipe(new ItemStack(MainSB.brickBlueClay, 1), new Object[] 
    {new ItemStack(Blocks.stained_hardened_clay,1,11),new ItemStack(MainSB.brickPattern, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(MainSB.toolChisel, 1, OreDictionary.WILDCARD_VALUE)});
     
     GameRegistry.addShapelessRecipe(new ItemStack(MainSB.brickBrownClay, 1), new Object[] 
    {new ItemStack(Blocks.stained_hardened_clay,1,12),new ItemStack(MainSB.brickPattern, 1, OreDictionary.WILDCARD_VALUE), new ItemStack(MainSB.toolChisel, 1, OreDictionary.WILDCARD_VALUE)});
     

вот пример, чтобы было понятнее о чем я говорю)
 
Может можно как-то присвоить каждой переменной ID (в моем случае блоки моего мода 16-ти цветов) ?
 
1,976
68
220
Метадата!
[merge_posts_bbcode]Добавлено: 04.07.2016 20:41:53[/merge_posts_bbcode]

Аа, у тебя самого не метадата... Сделай метадату тогда
 
Получается нужно создать 1 переменную блока, 1 регистрацию и в этом классе уже добавлять блоки с метадатой?
По аналогии с блоком досок из ванильного майна(BlockWood.class)
Я правильно понял?
 
1,976
68
220
Типа такого)
Посмотри на канале NealeGaming (это не пиар, просто хорошие туториалы), там есть про метадату блоков
 
Сверху