Какой способ создавать разно стороннюю текстуру лучше?

667
7
2
Вообщем нашёл два способа создать блок с разносторонней текстурой. Но какой лучше и чем?
1 С вики: 

2 Нашёл на форуме. Что то вроде этого

Код:
package taogunner.taomod.block;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import taogunner.taomod.TaoModMain;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockTest extends Block
{
    @SideOnly(Side.CLIENT)
    // Объявляем текстуры для сторон
    protected IIcon BlockIconFront;
    protected IIcon BlockIconSide;
    protected IIcon BlockIconTop;
    
    // Конструктор класса
    public BlockTest(Material material)
    {
        super(material);
        // Указываем вкладку креатива, в которой будет наш блок (вкладка Блоки, можно указать любую)
        this.setCreativeTab(CreativeTabs.tabBlock);
        // Указываем имя для блока (понадобится для локализации)
        this.setBlockName(TaoModMain.MODID + "." + "testblock");
    }
 
    @SideOnly(Side.CLIENT)
    @Override
    public void registerBlockIcons(IIconRegister par1IconRegister)
    {
        // Регистрируем путь до png-текстур для разных сторон блока
        BlockIconFront = par1IconRegister.registerIcon(TaoModMain.MODID + ":" + "testblock_front");
        BlockIconSide = par1IconRegister.registerIcon(TaoModMain.MODID + ":" + "testblock_side");
        BlockIconTop = par1IconRegister.registerIcon(TaoModMain.MODID + ":" + "testblock_top");
    }
    
    @SideOnly(Side.CLIENT)
    @Override
    public IIcon getIcon(int par1int, int par2int)
    {
        // par1int - это номер стороны от 0 до 5
        // 0 - низ; 1- верх; 2,3,4,5 - стороны
        // par2int - это метадата стороны
        if (par1int == 0 || par1int == 1) { return BlockIconTop; }
        else if (par1int != par2int) { return BlockIconSide; }
        else { return BlockIconFront; }
    }
    
    // Этот метод вызывается когда блок ставится кем-то
    @Override
    public void onBlockPlacedBy(World par1World, int par2int, int par3int, int par4int, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack)
    {
        // Это - хитрая функция, которая определяет куда смотрел игрок, когда ставил
        int i = MathHelper.floor_double((double)(par5EntityLivingBase.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
        
        // Тут мы меняем метадату нужной стороны, чтобы getIcon() потом покрасил эту сторону по-другому
        // setBlockMetadataWithNotify(x, y, z, номер стороны, 2 - хз оно так в оригинале);
        switch (i)
        {
            case 0: par1World.setBlockMetadataWithNotify(par2int, par3int, par4int, 2, 2); break;
            case 1: par1World.setBlockMetadataWithNotify(par2int, par3int, par4int, 5, 2); break;
            case 2: par1World.setBlockMetadataWithNotify(par2int, par3int, par4int, 3, 2); break;
            case 3: par1World.setBlockMetadataWithNotify(par2int, par3int, par4int, 4, 2); break;
        }
    }
}
 
Я вот делаю массив с иконками и делаю что-то такое:
Код:
public IIcon getIcon(int s, int m)
{
    int a = 0;
    if (s == 0)
    {
        a = 1
   } 
    return icons[a];
}
 
Вообще без разницы. Проще, конечно, как на вики. Если сторон не 6, а верх-низ-стороны, то 0 и 1 можно отдельно регать, а 2-5 в цикле, а можно и вообще всё отдельно, если названия разные
 
AlexSocol написал(а):
Вообще без разницы. Проще, конечно, как на вики. Если сторон не 6, а верх-низ-стороны, то 0 и 1 можно отдельно регать, а 2-5 в цикле, а можно и вообще всё отдельно, если названия разные
То есть если у меня блок из 6 текстур всё норм. А если у меня левая и правая текстура одинаковые лучше делать через 2 способ? Конечно можно скопировать боковую текстуру и назвать её для левой и правой стороны. Но два одинаковых файла ради этого...
[merge_posts_bbcode]Добавлено: 29.05.2016 21:44:18[/merge_posts_bbcode]

Или есть способ в первом варианте обойтись без двух одинаковых текстур?
 
meh
Что такое массив? Это упорядоченное множество. Соответственно каждому элементу массива соответствует свой номер.
Что такое for? Это цикл. Сколько сторон у блока? Правильно, 6. А сколько повторов в цикле на вики? Тоже 6? Как удивительно!
Массив из 6 элементов заполняется 6 раз в цикле. И ничего не мешает тебе вписать одинаковые пермененные в разные ячейки
 
Назад
Сверху