И в который раз метадата (1.7.10)

4,167
68
693
Народ, можете объяснить каким образом устроен блок большого гриба?
Предвидя самый очевидный ответ: "метадата", скажу: ведь метадата блока может принимать только 16 значений (если не прав, поправьте), но блок гриба присутствует в игре аж в 20-ти вариантах, учитывая, что есть красные и коричневые грибы.
В каждом из этих грибов есть по 9 вариантов окраски шляпки + ствол + чистый блок гриба.

Залезал в блок, видел, что там какой-то мухлёж с названием текстур. То есть через переменные строки собирается название нужной текстуры, но как всё это работает и как этот блок размещать в мире не понимаю.

Спасибо за ответ )
 
Для корректного определения текстур для отрисовки на гранях метадата нафиг не нужна. Там хватит лишь проверки соседних блоков, что можно сделать при отрисовке. Сейм финг делает забор.
Метадата небось юзается только для определения типа гриба - красный\коричневый\ствол (про ствол не факт).
 
Отрисовка в RenderBlocks. Там посылаются коорды блока и ещё некоторые параметры.
Зная коорды, вытащить соседние осилишь?
Для того, чтобы сделать подобное самому, нужно имплементить ISimpleBlockRender-чототам, я уже не помню.
 
Воспользуюсь твоей подписью "Уууууууууу".
До этого мне ещё далеко. Я с метадато-то только начал разбираться.

Но возвращаясь к блоку гриба, неужели там сделано именно так? С виду, если почитать в Get IIcon, как раз таки вариации метадаты и стороны блока.

Есть какой-нибудь простой способ (для новичка), чтобы запихнуть 32 блока в один? ))) Или, может быть, есть какие-нибудь примеры блоков, где применён RenderBlocks? Чтобы понять, как он работает.
Буду очень благодарен.
 
Liahim написал(а):
Воспользуюсь твоей подписью "Уууууууууу".
До этого мне ещё далеко. Я с метадато-то только начал разбираться.

Но возвращаясь к блоку гриба, неужели там сделано именно так? С виду, если почитать в Get IIcon, как раз таки вариации метадаты и стороны блока.

Есть какой-нибудь простой способ (для новичка), чтобы запихнуть 32 блока в один? ))) Или, может быть, есть какие-нибудь примеры блоков, где применён RenderBlocks? Чтобы понять, как он работает.
Буду очень благодарен.
Напиши скайп, попробую помочь.
 
krok написал(а):
Через тайл,у предметов меты больше
Метадата, главное - компактный код.
[merge_posts_bbcode]Добавлено: 26.06.2015 14:00:16[/merge_posts_bbcode]

krok написал(а):
Через тайл,у предметов меты больше
Метадата, главное - компактный код.
 
Код:
блок гриба присутствует в игре аж в 20-ти вариантах, учитывая, что есть красные и коричневые грибы.

Но красный и коричневый гриб - разные блоки!?
 
Немного переработал идею и понял, как можно сэкономить на метадате.

Народ, вопрос другой, нужно создать некое подобие блока травы, то есть, чтобы цвет для части текстуры брался из цвета биома.
Попробовал повторить саму траву (getIconSideOverlay), но ничего не выходит.
Неужели для этого нужно свой рендер писать или есть более простой способ?
 
Код:
    public int getBlockColor()
    {
        double d = 0.5D;
        double d1 = 1.0D;
        return ColorizerGrass.getGrassColor(d, d1);
    }

    /**
     * Returns the color this block should be rendered. Used by leaves.
     */
    public int getRenderColor(int par1)
    {
        return getBlockColor();
    }

    /**
     * Returns a integer with hex for 0xrrggbb with this color multiplied against the blocks color. Note only called
     * when first determining what to render.
     */
    public int colorMultiplier(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
    {
        int i = 0;
        int j = 0;
        int k = 0;

        for (int l = -1; l <= 1; l++)
        {
            for (int i1 = -1; i1 <= 1; i1++)
            {
                int j1 = par1IBlockAccess.func_48454_a(par2 + i1, par4 + l).func_48415_j();
                i += (j1 & 0xff0000) >> 16;
                j += (j1 & 0xff00) >> 8;
                k += j1 & 0xff;
            }
        }

        return (i / 9 & 0xff) << 16 | (j / 9 & 0xff) << 8 | k / 9 & 0xff;
    }
 
Ну, ясное дело, я всё это тупо скопировал с блока травы. Но если подставить собственные текстуры, блок красится целиком. А нужно, чтобы красилась только трава.

Код:
@SideOnly(Side.CLIENT)
public int getBlockColor()
{
double d0 = 0.5D;
double d1 = 1.0D;
return ColorizerGrass.getGrassColor(d0, d1);
}
    
@SideOnly(Side.CLIENT)
public int getRenderColor(int p_149741_1_)
{
return this.getBlockColor();
}
    
@SideOnly(Side.CLIENT)
public int colorMultiplier(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
{
int i = 0;
int j = 0;
int k = 0;

for (int l = -1; l <= 1; l++)
{
   for (int i1 = -1; i1 <= 1; i1++)
   {
   int j1 = par1IBlockAccess.getBiomeGenForCoords(par2 + i1, par4 + l).getBiomeGrassColor(par2 + i1, par3, par4 + l);
       i += (j1 & 0xff0000) >> 16;
       j += (j1 & 0xff00) >> 8;
       k += j1 & 0xff;
    }
}

return (i / 9 & 0xff) << 16 | (j / 9 & 0xff) << 8 | k / 9 & 0xff;
}

@SideOnly(Side.CLIENT)
public static IIcon getIconSideOverlay()
{
return Blocks.grass.getIconSideOverlay();
}
 
krok написал(а):
Multipass или как-то так.Рендерить просто блок и блок,который красить
А можно чуточку по подробнее?
Multipass - это метод в рендере блока или в самом блоке?
PS - В рендер даже боюсь заглядывать )))
 
Назад
Сверху