Помогите сделать текстуру на противоположной стороне блока

Версия Minecraft
1.7.10
101
3
Прошу помощи, делаю сборочку себе и пишу для нее простецкий мод на дополнительные блоки.
Для реализации в игре рекламного баннера, появилась необходимость накладывать на противоположную сторону блока текстуру.
Смысл в чем. Есть код, которые поворачивает текстуру на блоке к игроку. Мне необходимо, чтобы с противоположной стороны отображалась другая текстура.
Вот код:
Код:
package ru.ipv2007.city;

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.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;

public class City_block014_1 extends Block {

 protected City_block014_1() {
 super(Material.iron);

 this.setBlockName("City_block014_1");
 this.setCreativeTab(MainCity.city);
 this.setHardness(5F);
 this.setResistance(10F);
 this.setHarvestLevel("pickaxe", 1);
 this.setStepSound(Block.soundTypeStone);
 
 this.setBlockTextureName("city:City_block014_1");
 }
 @SideOnly(Side.CLIENT)
    private IIcon blockIcon;
    private IIcon blockIcon_front;

    @SideOnly(Side.CLIENT)
    @Override
    public void registerBlockIcons(IIconRegister iconReg)
    {
        blockIcon = iconReg.registerIcon("city:City_block014");
        blockIcon_front = iconReg.registerIcon("city:City_block014_1");
    }
    @SideOnly(Side.CLIENT)
    @Override
    public IIcon getIcon(int side, int meta)
    {
        ForgeDirection dir = ForgeDirection.getOrientation(side);
        ForgeDirection block_dir;
        if (meta != 0)
            block_dir = ForgeDirection.getOrientation(meta);
        else
            block_dir = ForgeDirection.WEST;
        if (block_dir == dir) return blockIcon_front;
        return blockIcon;
    }
    @Override
    public void onBlockPlacedBy(World world, int x, int y, int z,
            EntityLivingBase entity, ItemStack itemStack) {
        super.onBlockPlacedBy(world, x, y, z, entity, itemStack);
        int dir = (MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3);
        int[] r = {2, 5, 3, 4};
        world.setBlockMetadataWithNotify(x, y, z, r[dir], 3);
    }

   public boolean isOpaqueCube()
      {
          return false;
      }
}

В этом коде на все стороны блока натягивается текстура с именем City_block014, на сторону смотрящую к игроку натягивается текстура City_block014_1. Помогите дописать этот код, чтобы на противоположную сторону от текстуры City_block014_1 натягивалась текстура, скажем City_block014_2.
Заранее огромное спасибо!
 
101
3
WildHeart написал(а):
Блок печки смотри

Зачем? У блока печки боковые стороны и задняя сторона одинаковые!
А мне надо, чтобы задняя стенка была с другой текстурой!
Для наглядности вставлю скриншот со своим блоком и блоком печки. Что я должен в ней увидеть? У меня все так-же. Текстура поворачивается со стороны игрока, как и у печки, а вот проитивоположная (задняя) сторона? Как ее поменять?
[attachment=135]
 

Вложения

  • 2017-01-07_20.58.53.jpg
    2017-01-07_20.58.53.jpg
    278.4 KB · Просмотры: 24
101
3
WildHeart написал(а):
Ты можешь настроить на каждую сторону свою текстуру.

Сложно общаться с человеком не вникшего в проблему! ))
Мне надо, чтобы задняя сторона тоже определяла положение игрока, как и лицевая!
Только она должна быть не со стороны игрока (как у печки), а сзади (с противоположной)!
Давай проще спрошу: Как сделать так, чтобы печка ставилась к тебе задом?


Нарисовал для наглядности:
[attachment=136]
 

Вложения

  • Без имени-2.jpg
    Без имени-2.jpg
    204.3 KB · Просмотры: 21

Icosider

Kotliner
Администратор
3,603
99
664
ipv2007 написал(а):
WildHeart написал(а):
Ты можешь настроить на каждую сторону свою текстуру.

Сложно общаться с человеком не вникшем в проблему! ))
Мне надо, чтобы задняя сторона тоже определяла положение игрока, как и лицевая!
Только она должна быть не со стороны игрока (как у печки), а сзади (с противоположной)!
Давай проще спрошу: Как сделать так, чтобы печка ставилась к тебе задом?

Я сразу понял, что тебе нужно и дал указание куда копать, но ты видимо не понял или не подумал. Смотри код печи, там есть то, что тебе нужно, просто это нужно "отзеркалить".
 
101
3
WildHeart написал(а):
ipv2007 написал(а):
WildHeart написал(а):
Ты можешь настроить на каждую сторону свою текстуру.

Сложно общаться с человеком не вникшем в проблему! ))
Мне надо, чтобы задняя сторона тоже определяла положение игрока, как и лицевая!
Только она должна быть не со стороны игрока (как у печки), а сзади (с противоположной)!
Давай проще спрошу: Как сделать так, чтобы печка ставилась к тебе задом?

Я сразу понял, что тебе нужно и дал указание куда копать, но ты видимо не понял или не подумал. Смотри код печи, там есть то, что тебе нужно, просто это нужно "отзеркалить".

Я понимаю, что надо отзеркалить. Я и спрашиваю, КАК?
Даже привел свой код, смотри выше. Этот код поворачивает текстуру (как у печки) к игроку, но как отзеркалить?
 

Icosider

Kotliner
Администратор
3,603
99
664
ipv2007 написал(а):
WildHeart написал(а):
ipv2007 написал(а):
WildHeart написал(а):
Ты можешь настроить на каждую сторону свою текстуру.

Сложно общаться с человеком не вникшем в проблему! ))
Мне надо, чтобы задняя сторона тоже определяла положение игрока, как и лицевая!
Только она должна быть не со стороны игрока (как у печки), а сзади (с противоположной)!
Давай проще спрошу: Как сделать так, чтобы печка ставилась к тебе задом?

Я сразу понял, что тебе нужно и дал указание куда копать, но ты видимо не понял или не подумал. Смотри код печи, там есть то, что тебе нужно, просто это нужно "отзеркалить".

Я понимаю, что надо отзеркалить. Я и спрашиваю, КАК?
Даже привел свой код от печки, смотри выше. Этот код поворачивает текстуру к игроку, но как отзеркалить?
Получаем позицию, разворачиваем на 180 градусов или же изучаем код печи!
 
101
3
1. Я уже изучил код печи.
2. Я уже имею свой код с разворотом текстуры в сторону игрока.
Как мне в вышеуказанный код встроить еще одну текстуру на заднюю сторону?
Я понимаю, логически, что надо взять еще одну текстуру и развернуть ее на 180 градусов в противоположную сторону от имеющейся лицевой текстуры.
У меня не получается это воплотить в жизнь (в коде), поэтому и прошу помощи, конкретной, на примере моего кода.
Мне не нужны советы - "возьми, разверни". Мне нужна помощь физическая в коде!
Здесь же помогают разбираться в коде, а не советами: "разверни на 180 градусов". Это и так понятно, что надо развернуть, как еще иначе получить текстуру сзади? Только разворотом на 180!
КАК развернуть на 180 градусов?
 

Icosider

Kotliner
Администратор
3,603
99
664
Liahim написал(а):
А причём тут вообще печка?
Где ты такое у печки видел?

Думаю, что тут нужно свой рендер для блока писать...
Если, конечно, нет какого-нибудь супер метода, о котором я не знаю...

У печки отдельная текстура, которая на тебя смотрит, ему нужно сделать что-то подобие печки, но с текстурой в заде, а не спереди. И отдельные рендеры блоков делать не надо.
 
101
3
WildHeart написал(а):
Liahim написал(а):
А причём тут вообще печка?
Где ты такое у печки видел?

Думаю, что тут нужно свой рендер для блока писать...
Если, конечно, нет какого-нибудь супер метода, о котором я не знаю...

У печки отдельная текстура, которая на тебя смотрит, ему нужно сделать что-то подобие печки, но с текстурой в заде, а не спереди. И отдельные рендеры блоков делать не надо.

Мне надо сделать текстуру спереди и сзади, одновременно и разные!
Ну, я уже на знаю, что еще сказать.
В общем, кто может помочь, допишите мне мой код в первом сообщении.
Отблагодарю рублем. ;)
 
4,045
63
645
WildHeart написал(а):
Liahim написал(а):
А причём тут вообще печка?
Где ты такое у печки видел?

Думаю, что тут нужно свой рендер для блока писать...
Если, конечно, нет какого-нибудь супер метода, о котором я не знаю...

У печки отдельная текстура, которая на тебя смотрит, ему нужно сделать что-то подобие печки, но с текстурой в заде, а не спереди. И отдельные рендеры блоков делать не надо.

Я ж вроде удалил эту запись. Откель вы её достали?
Адмиииииииииин! Это глюк или нет?

А вообще, я подумал, что ему нужна текстура изнутри блока...
Но потом посмотрел на картинку и понял.
 

Icosider

Kotliner
Администратор
3,603
99
664
Liahim написал(а):
WildHeart написал(а):
Liahim написал(а):
А причём тут вообще печка?
Где ты такое у печки видел?

Думаю, что тут нужно свой рендер для блока писать...
Если, конечно, нет какого-нибудь супер метода, о котором я не знаю...

У печки отдельная текстура, которая на тебя смотрит, ему нужно сделать что-то подобие печки, но с текстурой в заде, а не спереди. И отдельные рендеры блоков делать не надо.

Я ж вроде удалил эту запись. Откель вы её достали?
Адмиииииииииин! Это глюк или нет?

А вообще, я подумал, что ему нужна текстура изнутри блока...
Но потом посмотрел на картинку и понял.

На тот момент я смотрел тему:) Если бы одмен был бы продуманным(я не пытаюсь оскорбить), он бы написал обновление комментариев на аяксе, но в моем случае, лучше на реакторе, и тогда бы комменты обновлялись динамично))


Со спойлерами тоже косяк, когда изменяешь коммент, спойлеры перестают работать, и только после перезагрузки страницы все работает. Да и движок форумный овно)
 
2,505
81
397
Код:
private static int[] front = new int[] {2, 5, 3, 4};
private static int[] back  = new int[] {3, 4, 2, 5};

@Override
public IIcon getIcon(int side, int meta)
{
    //  top          bottom
    if (side == 0 || side == 1) {
        return null;
    }

    // front
    if (side == front[meta & 3]) {
        return blockIcon;
    }

    // back
    if (side == back[meta & 3]) {
        return blockIcon;
    }

    return null;
}

@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemStack)
{
    super.onBlockPlacedBy(world, x, y, z, entity, itemStack);
    int l = MathHelper.floor_double(entity.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
    world.setBlockMetadataWithNotify(x, y, z, l, 2);
}


Должно работать
 

timaxa007

Модератор
5,831
409
672
Код:
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int side, int meta) {

	ForgeDirection dir = ForgeDirection.getOrientation(side);
	ForgeDirection block_dir;
	if (meta != 0)
		block_dir = ForgeDirection.getOrientation(meta);
	else
		block_dir = ForgeDirection.WEST;
	if (block_dir == dir) return blockIcon_front;
//---
	if (meta == 2 && side == 3) return blockIcon_front;
	else if (meta == 5 && side == 4) return blockIcon_front;
	else if (meta == 3 && side == 2) return blockIcon_front;
	else if (meta == 4 && side == 5) return blockIcon_front;
//---
	return blockIcon;
}


Денег не надо.
 
101
3
timaxa007 написал(а):
Код:
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int side, int meta) {

 ForgeDirection dir = ForgeDirection.getOrientation(side);
 ForgeDirection block_dir;
 if (meta != 0)
 block_dir = ForgeDirection.getOrientation(meta);
 else
 block_dir = ForgeDirection.WEST;
 if (block_dir == dir) return blockIcon_front;
//---
 if (meta == 2 && side == 3) return blockIcon_front;
 else if (meta == 5 && side == 4) return blockIcon_front;
 else if (meta == 3 && side == 2) return blockIcon_front;
 else if (meta == 4 && side == 5) return blockIcon_front;
//---
 return blockIcon;
}


Денег не надо.


Огромное спасибо! Все СУПЕР, работает так, как я хотел!
Кидай свой ВебМани в личку, отблагодарю (не смотря на то, что тебе не нужны мани). ))

Код немного подправил т.к. мне нужна была сзади другая текстура (не та, что накладывается спереди), но не суть! ;)

Для всех остальных кидаю полный код этой задачи (может пригодится кому...):

Код:
package ru.ipv2007.city;

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.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;

public class City_block014_1 extends Block {

 protected City_block014_1() {
 super(Material.iron);

 this.setBlockName("City_block014_1");
 this.setCreativeTab(MainCity.city);
 this.setHardness(5F);
 this.setResistance(10F);
 this.setHarvestLevel("pickaxe", 1);
 this.setStepSound(Block.soundTypeStone);
 
 this.setBlockTextureName("city:City_block014_1");
 }
 @SideOnly(Side.CLIENT)
    private IIcon blockIcon;
    private IIcon blockIcon_front;
    private IIcon blockIcon_back;

    @SideOnly(Side.CLIENT)
    @Override
    public void registerBlockIcons(IIconRegister iconReg)
    {
        blockIcon = iconReg.registerIcon("city:City_block014");
        blockIcon_front = iconReg.registerIcon("city:City_block014_1");
        blockIcon_back = iconReg.registerIcon("city:City_block014_3");
    }
    
    @SideOnly(Side.CLIENT)
    @Override
    public IIcon getIcon(int side, int meta) {

    ForgeDirection dir = ForgeDirection.getOrientation(side);
    ForgeDirection block_dir;
    if (meta != 0)
    block_dir = ForgeDirection.getOrientation(meta);
    else
    block_dir = ForgeDirection.WEST;
    if (block_dir == dir) return blockIcon_front;
    //---
    if (meta == 2 && side == 3) return blockIcon_back;
    else if (meta == 5 && side == 4) return blockIcon_back;
    else if (meta == 3 && side == 2) return blockIcon_back;
    else if (meta == 4 && side == 5) return blockIcon_back;
    //---
    return blockIcon;
    }
    @Override
    public void onBlockPlacedBy(World world, int x, int y, int z,
            EntityLivingBase entity, ItemStack itemStack) {
        super.onBlockPlacedBy(world, x, y, z, entity, itemStack);
        int dir = (MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3);
        int[] r = {2, 5, 3, 4};
        world.setBlockMetadataWithNotify(x, y, z, r[dir], 3);
    }
}
 
Сверху