[1.7.2]Рендер по метадате

509
2
Нужно прифигачить текстуру рендеру в зависимости от метадаты. :angel:
Везде пробывала поставить. :blush:
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Текстура текстура1 = new Текстура();
Текстура текстура2 = new Текстура();
Текстура текстура3 = new Текстура();

рендер(Предмет пр){
  Коли(пр.дамаг == 0)
    забиндить(текстура1)
  Коли(пр.дамаг == 1)
    забиндить(текстура2)
  Коли(пр.дамаг == 2)
    забиндить(текстура3)

  самРендерТипаGL11_и_тд();
}
 
509
2
anti344 написал(а):
Текстура текстура1 = new Текстура();
Текстура текстура2 = new Текстура();
Текстура текстура3 = new Текстура();

рендер(Предмет пр){
  Коли(пр.дамаг == 0)
    забиндить(текстура1)
  Коли(пр.дамаг == 1)
    забиндить(текстура2)
  Коли(пр.дамаг == 2)
    забиндить(текстура3)

  самРендерТипаGL11_и_тд();
}
Откуда предмет достать?
 
509
2

necauqua

когда-то был anti344
Администратор
1,216
27
172
Учитывая, что рендер - клиент и только клиент - Minecraft.getMinecraft().thePlayer
А вообще в рендере тебе дают ItemStack, ты чего?
 
509
2
anti344 написал(а):
Учитывая, что рендер - клиент и только клиент - Minecraft.getMinecraft().thePlayer
А вообще в рендере тебе дают ItemStack, ты чего?

Код:
public void renderTileEntityAt(TileEntity tileEn, double x, double y,double z, float f) 
    {}

Эм, итемстак?
[merge_posts_bbcode]Добавлено: 04.05.2014 21:35:18[/merge_posts_bbcode]

Краш...
+ Я тут думаю , у меня кусты которые будут сами генерироваться. Каким Макаром они будут искать руки игрока?:ermm:
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
Это рендер блооооооокааа...
А так из TileEntity можно достать мир и коорды == метадату. Или сразу достать, там даже геттер есть для неё.
 
509
2
Кстати, допустим у меня 3 мета куста, у каждой будет 2 формы. Можно через ентити замутить? И вообще без меты можно тектстуры в зависимости от энтити переменной менять.
 
905
5
У меня есть такое, но у меня там еще и блок айди изменен.
А вообще, тебе какую именно текстуру надо поменять?
[merge_posts_bbcode]Добавлено: 05.05.2014 13:08:17[/merge_posts_bbcode]

Вобщем, так.
В TileRenderer(там, где renderTileEntityAt) отправляешь в ModelBlock tile.blockMetadata через конструктор, и по нему потом прикрепляешь текстуру/модель.
Примерно так:

Код:
    @Override
    public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float tick)
        {
        if (tileEntity instanceof TileCrystal)
            {
            TileCrystal tileCrystal = (TileCrystal) tileEntity;
            modelCrystal = new ModelCrystal(tileCrystal.blockMetadata); //если менять модель - сюда
            modelCrystal.render(tileCrystal, x, y, z, tileCrystal.blockMetadata); //если менять текстуру - сюда
            }
        }
Код:
    public ModelCrystal(int meta)
        {
        modelCrystal = AdvancedModelLoader.loadModel(new ResourceLocation("lazmod:models/crystal" + meta + ".obj"));
        }
Код:
    public void render(TileCrystal crystal, double x, double y, double z, int meta)
        {
        //типо рендер
        FMLClientHandler.instance().getClient().renderEngine.bindTexture(new ResourceLocation("lazmod:textures/crystals/crystal" + meta + ".png"));
        //типо рендер
        }
 
509
2
laz2727 написал(а):
У меня есть такое, но у меня там еще и блок айди изменен.
А вообще, тебе какую именно текстуру надо поменять?
[merge_posts_bbcode]Добавлено: 05.05.2014 13:08:17[/merge_posts_bbcode]

Вобщем, так.
В TileRenderer(там, где renderTileEntityAt) отправляешь в ModelBlock tile.blockMetadata через конструктор, и по нему потом прикрепляешь текстуру/модель.
Примерно так:

Код:
    @Override
    public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float tick)
        {
        if (tileEntity instanceof TileCrystal)
            {
            TileCrystal tileCrystal = (TileCrystal) tileEntity;
            modelCrystal = new ModelCrystal(tileCrystal.blockMetadata); //если менять модель - сюда
            modelCrystal.render(tileCrystal, x, y, z, tileCrystal.blockMetadata); //если менять текстуру - сюда
            }
        }
Код:
    public ModelCrystal(int meta)
        {
        modelCrystal = AdvancedModelLoader.loadModel(new ResourceLocation("lazmod:models/crystal" + meta + ".obj"));
        }
Код:
    public void render(TileCrystal crystal, double x, double y, double z, int meta)
        {
        //типо рендер
        FMLClientHandler.instance().getClient().renderEngine.bindTexture(new ResourceLocation("lazmod:textures/crystals/crystal" + meta + ".png"));
        //типо рендер
        }
У меня без модели,чисто рендер
 
509
2
Код:
public class renderBush extends TileEntitySpecialRenderer {

    static ResourceLocation texture = new ResourceLocation(RealCraft.MODID,"textures/model/bush.png");

    float pix = 1F/16F;
    float texpix = 1F/32F;

    public void renderTileEntityAt(TileEntity tileEn, double x, double y,double z, float f) 
    {
        GL11.glTranslated(x, y, z);
        GL11.glDisable(GL11.GL_LIGHTING);
        this.bindTexture(texture);
        drawBushCore(tileEn);
        drawBushConnect(ForgeDirection.WEST);
        GL11.glEnable(GL11.GL_LIGHTING);
        GL11.glTranslated(-x, -y, -z);
    }


    public void drawBushConnect(ForgeDirection dir)
    {
        GL11.glTranslated(0.5F, 0.5F, 0.5F);
        if(dir.equals(ForgeDirection.UP)){
            //rotate
        }
        else if(dir.equals(ForgeDirection.SOUTH)){
            GL11.glRotatef(90, 1, 0, 0);
            GL11.glTranslatef(0F, 0.118F, 0.12F);
            }
        else if(dir.equals(ForgeDirection.DOWN)){
            GL11.glRotatef(180, 1, 0, 0);
            GL11.glTranslatef(0F, 0.25F, 0F);
            }    
        else if(dir.equals(ForgeDirection.WEST)){
            GL11.glRotatef(270, 0, 0, -1);
            GL11.glTranslatef(0F, 0.118F, -0.12F);
            }
        else if(dir.equals(ForgeDirection.NORTH)){
            GL11.glRotatef(-90, 1, 0, 0);
            GL11.glTranslatef(0F, 0.118F, -0.12F);
            }
    


        GL11.glTranslated(-0.5F, -0.5F, -0.5F);

        Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        {
            tessellator.addVertexWithUV(1-5*pix/2, 23*pix/2, 1-5*pix/2, 24*texpix, 32*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-3.5*pix/2, 1-5*pix/2, 24*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1-3.5*pix/2, 1-5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 23*pix/2, 1-5*pix/2, 16*texpix, 32*texpix);

            tessellator.addVertexWithUV(5*pix/2, 23*pix/2, 5*pix/2, 24*texpix, 32*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1-3.5*pix/2, 5*pix/2, 24*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-3.5*pix/2, 5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 23*pix/2, 5*pix/2, 16*texpix, 32*texpix);
            
            tessellator.addVertexWithUV(5*pix/2, 23*pix/2, 1-5*pix/2, 24*texpix, 32*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1-3.5*pix/2, 1-5*pix/2, 24*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1-3.5*pix/2, 5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 23*pix/2, 5*pix/2, 16*texpix, 32*texpix);

            tessellator.addVertexWithUV(1-5*pix/2, 23*pix/2, 5*pix/2, 24*texpix, 32*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-3.5*pix/2, 5*pix/2, 24*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-3.4*pix/2, 1-5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 23*pix/2, 1-5*pix/2, 16*texpix, 32*texpix);
            
            tessellator.addVertexWithUV(1-5*pix/2, 23*pix/2, 1-5*pix/2, 32*texpix, 32*texpix);
            tessellator.addVertexWithUV(5*pix/2, 23*pix/2, 1-5*pix/2, 32*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 23*pix/2, 5*pix/2, 24*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2,23*pix/2, 5*pix/2, 24*texpix, 32*texpix);

            tessellator.addVertexWithUV(5*pix/2, 1-3.5*pix/2, 1-5*pix/2, 32*texpix, 32*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-3.5*pix/2, 1-5*pix/2, 32*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-3.5*pix/2, 5*pix/2, 24*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2,1-3.5*pix/2, 5*pix/2, 24*texpix, 32*texpix);
            
        }


        tessellator.draw();
        GL11.glTranslated(0.5F, 0.5F, 0.5F);
        if(dir.equals(ForgeDirection.EAST)){
            //rotate
        }
        else if(dir.equals(ForgeDirection.SOUTH)){
            GL11.glRotatef(-90, 1, 0, 0);
            GL11.glTranslatef(0F, 0.118F, -0.12F);
        }
        else if(dir.equals(ForgeDirection.DOWN)){
            GL11.glRotatef(180, 1, 0, 0);
            GL11.glTranslatef(0F, 0.25F, 0F);
            }
        else if(dir.equals(ForgeDirection.WEST)){
            GL11.glRotatef(-270, 0, 0, -1);
            GL11.glTranslatef(0F, 0.118F, 0.12F);
            }
        
        else if(dir.equals(ForgeDirection.NORTH)){
            GL11.glRotatef(90, 1, 0, 0);
            GL11.glTranslatef(0F, 0.118F, 0.12F);
            }
        

        GL11.glTranslated(-0.5F, -0.5F, -0.5F);
    }

    public void drawBushCore(TileEntity tEn)
    {
        Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        {

            tessellator.addVertexWithUV(1-5*pix/2, 1*pix/2, 1-5*pix/2, 16*texpix, 32*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-9*pix/2, 1-5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1-9*pix/2, 1-5*pix/2, 0*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1*pix/2, 1-5*pix/2, 0*texpix, 32*texpix);

            tessellator.addVertexWithUV(1-5*pix/2, 1*pix/2, 5*pix/2, 16*texpix, 32*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-9*pix/2, 5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-9*pix/2, 1-5*pix/2, 0*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1*pix/2, 1-5*pix/2, 0*texpix, 32*texpix);

            tessellator.addVertexWithUV(5*pix/2, 1*pix/2, 1-5*pix/2, 16*texpix, 32*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1-9*pix/2, 1-5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1-9*pix/2, 5*pix/2, 0*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1*pix/2, 5*pix/2, 0*texpix, 32*texpix);

            tessellator.addVertexWithUV(5*pix/2, 1*pix/2, 5*pix/2, 16*texpix, 32*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1-9*pix/2, 5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-9*pix/2, 5*pix/2, 0*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2,1*pix/2, 5*pix/2, 0*texpix, 32*texpix);


            tessellator.addVertexWithUV(1-5*pix/2, 1*pix/2, 1-5*pix/2, 16*texpix, 32*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1*pix/2, 1-5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2, 1*pix/2, 5*pix/2, 0*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2,1*pix/2, 5*pix/2, 0*texpix, 32*texpix);

            tessellator.addVertexWithUV(5*pix/2, 1-9*pix/2, 1-5*pix/2, 16*texpix, 32*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-9*pix/2, 1-5*pix/2, 16*texpix, 0*texpix);
            tessellator.addVertexWithUV(1-5*pix/2, 1-9*pix/2, 5*pix/2, 0*texpix, 0*texpix);
            tessellator.addVertexWithUV(5*pix/2,1-9*pix/2, 5*pix/2, 0*texpix, 32*texpix);


        }


        tessellator.draw();

    }
Ранее размещала, не многое поменялось
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
И конечно-же, нужно использовать переменную, значение которой может быть -1, а не геттер, который проверяет и достает новую, если она вдруг изменилась.
 
905
5
Регистрируй текстуру в конструкторе и биндь через свитч, очевидно же?
Анти, в оригинале, как ты мог бы знать, если бы смотрел код, а не закрывал рукой(я не осуждаю тебя, впрочем), вообще строка стоит. Уже улучшение.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
laz2727 написал(а):
в оригинале ... вообще строка стоит
Это ты о чем? Я о доставании метадаты из тайла.
 
509
2
laz2727 написал(а):
Регистрируй текстуру в конструкторе и биндь через свитч, очевидно же?
Анти, в оригинале, как ты мог бы знать, если бы смотрел код, а не закрывал рукой(я не осуждаю тебя, впрочем), вообще строка стоит. Уже улучшение.
Повторяю - краш!
Я уже вставляла такую конструкцию. Просто это чуть старый код, из темы.Пару изменений всего лишь внесла
 
509
2
anti344 написал(а):
И конечно-же, нужно использовать переменную, значение которой может быть -1, а не геттер, который проверяет и достает новую, если она вдруг изменилась.
Поподробней. какой тип переменной?Где её объявить?
 
905
5
Ээм. Я думал, ты догадаешься все-таки запстить лог.
 

necauqua

когда-то был anti344
Администратор
1,216
27
172
tileCrystal.blockMetadata <- есть метод, заменяющий сие.
 
Сверху