Помогите отрендерить трубу как в билдкрафте или ic2

Всё.

r6BhcbN.png


Код:
    @Override
    public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) 
    {        
        renderer.setRenderBounds(0.3F, 0.3F, 0.3F, 0.7F, 0.7F, 0.7F);       
        renderer.renderStandardBlock(Blocks.stone, x, y, z);
        
        if(world.getBlock(x+1, y, z) == RegisterSpecialBlock.connectedBlock1)
        {
            renderer.setRenderBounds(0.7F, 0.3F, 0.3F, 1, 0.7F, 0.7F);       
            renderer.renderStandardBlock(Blocks.stone, x, y, z);
        }
        if(world.getBlock(x-1, y, z) == RegisterSpecialBlock.connectedBlock1)
        {
            renderer.setRenderBounds(0F, 0.3F, 0.3F, 0.3F, 0.7F, 0.7F);       
            renderer.renderStandardBlock(Blocks.stone, x, y, z);
        }
        if(world.getBlock(x, y, z+1) == RegisterSpecialBlock.connectedBlock1)
        {
            renderer.setRenderBounds(0.3F, 0.3F, 0.7F, 0.7F, 0.7F, 1F);       
            renderer.renderStandardBlock(Blocks.stone, x, y, z);
        }
        if(world.getBlock(x, y, z-1) == RegisterSpecialBlock.connectedBlock1)
        {
            renderer.setRenderBounds(0.3F, 0.3F, 0F, 0.7F, 0.7F, 0.3F);       
            renderer.renderStandardBlock(Blocks.stone, x, y, z);
        }
        if(world.getBlock(x, y+1, z) == RegisterSpecialBlock.connectedBlock1)
        {
            renderer.setRenderBounds(0.3F, 0.7F, 0.3F, 0.7F, 1F, 0.7F);       
            renderer.renderStandardBlock(Blocks.stone, x, y, z);
        }
        if(world.getBlock(x, y-1, z) == RegisterSpecialBlock.connectedBlock1)
        {
            renderer.setRenderBounds(0.3F, 0F, 0.3F, 0.7F, 0.3F, 0.7F);       
            renderer.renderStandardBlock(Blocks.stone, x, y, z);
        }
        
        return true;
    }
[merge_posts_bbcode]Добавлено: 09.02.2016 17:03:08[/merge_posts_bbcode]

Позже скину продвинутую версию, что-бы к стенам крепилось.
 
Конечный вариант:
Код:
package com.svk.addItems.client.render.blocks;

import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.init.Blocks;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;

import org.lwjgl.opengl.GL11;

import com.svk.addItems.blocks.BlockConnected;
import com.svk.addItems.client.ClientProxy;

import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;

public class RenderConnectedBlock implements ISimpleBlockRenderingHandler
{
    @Override
    public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer)
    {        
        renderer.setRenderBounds(0.0F, 0.3F, 0.3F, 1, 0.7F, 0.7F);  
        
        GL11.glPushMatrix();
        IIcon icon = block.getIcon(0, 0);
        Tessellator tessellator = Tessellator.instance;

        GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
        GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
        tessellator.startDrawingQuads();
        tessellator.setNormal(0.0F, -1.0F, 0.0F);
        renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, icon);
        tessellator.draw();

        tessellator.startDrawingQuads();
        tessellator.setNormal(0.0F, 1.0F, 0.0F);
        renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, icon);
        tessellator.draw();

        tessellator.startDrawingQuads();
        tessellator.setNormal(0.0F, 0.0F, -1.0F);
        renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, icon);
        tessellator.draw();
        tessellator.startDrawingQuads();
        tessellator.setNormal(0.0F, 0.0F, 1.0F);
        renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, icon);
        tessellator.draw();
        tessellator.startDrawingQuads();
        tessellator.setNormal(-1.0F, 0.0F, 0.0F);
        renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, icon);
        tessellator.draw();
        tessellator.startDrawingQuads();
        tessellator.setNormal(1.0F, 0.0F, 0.0F);
        renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, icon);
        tessellator.draw();
        GL11.glTranslatef(0.5F, 0.5F, 0.5F);
        GL11.glPopMatrix();
    }

    @Override
    public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) 
    {        
        Tessellator tess = Tessellator.instance;

        boolean[] connects = this.getConnects(world, x, y, z);
        int meta = world.getBlockMetadata(x, y, z);

        renderer.renderAllFaces = true;
        renderer.setRenderBounds(0.3F, 0.3F, 0.3F, 0.7F, 0.7F, 0.7F);       
        renderer.renderStandardBlock(block, x, y, z);

        if(connects[0] || meta == 5)
        {
            renderer.setRenderBounds(0.7F, 0.3F, 0.3F, 1, 0.7F, 0.7F);       
            renderer.renderStandardBlock(block, x, y, z);
        }
        if(connects[1] || meta == 6)
        {
            renderer.setRenderBounds(0F, 0.3F, 0.3F, 0.3F, 0.7F, 0.7F);       
            renderer.renderStandardBlock(block, x, y, z);
        }
        if(connects[2] || meta == 1)
        {
            renderer.setRenderBounds(0.3F, 0.7F, 0.3F, 0.7F, 1F, 0.7F);       
            renderer.renderStandardBlock(block, x, y, z);
        }
        if(connects[3] || meta == 2)
        {
            renderer.setRenderBounds(0.3F, 0F, 0.3F, 0.7F, 0.3F, 0.7F);       
            renderer.renderStandardBlock(block, x, y, z);
        }        
        if(connects[4] || meta == 3)
        {
            renderer.setRenderBounds(0.3F, 0.3F, 0.7F, 0.7F, 0.7F, 1F);       
            renderer.renderStandardBlock(block, x, y, z);
        }
        if(connects[5] || meta == 4)
        {
            renderer.setRenderBounds(0.3F, 0.3F, 0F, 0.7F, 0.7F, 0.3F);       
            renderer.renderStandardBlock(block, x, y, z);
        }
        renderer.renderAllFaces = false;

        if(((BlockConnected) block).mount)
        {
            if(!world.isAirBlock(x+1, y, z) && !(world.getBlock(x+1, y, z) instanceof BlockConnected))
            {
                renderer.setRenderBounds(0.7F, 0.4F, 0.45F, 1.0F, 0.6F, 0.55F);       
                renderer.renderStandardBlock(Blocks.iron_block, x, y, z);
            }

            if(!world.isAirBlock(x-1, y, z) && !(world.getBlock(x-1, y, z) instanceof BlockConnected))
            {
                renderer.setRenderBounds(0.0F, 0.4F, 0.45F, 0.3F, 0.6F, 0.55F);       
                renderer.renderStandardBlock(Blocks.iron_block, x, y, z);
            }

            if(!world.isAirBlock(x, y, z+1) && !(world.getBlock(x, y, z+1) instanceof BlockConnected))
            {
                renderer.setRenderBounds(0.45F, 0.4F, 0.7F, 0.55F, 0.6F, 1.0F);       
                renderer.renderStandardBlock(Blocks.iron_block, x, y, z);
            }

            if(!world.isAirBlock(x, y, z-1) && !(world.getBlock(x, y, z-1) instanceof BlockConnected))
            {
                renderer.setRenderBounds(0.45F, 0.4F, 0.0F, 0.55F, 0.6F, 0.3F);       
                renderer.renderStandardBlock(Blocks.iron_block, x, y, z);
            }

            if(!world.isAirBlock(x, y+1, z) && !(world.getBlock(x, y+1, z) instanceof BlockConnected))
            {
                renderer.setRenderBounds(0.4F, 0.7F, 0.4F, 0.6F, 1.0F, 0.6F);       
                renderer.renderStandardBlock(Blocks.iron_block, x, y, z);
            }

            if(!world.isAirBlock(x, y-1, z) && !(world.getBlock(x, y-1, z) instanceof BlockConnected))
            {
                renderer.setRenderBounds(0.4F, 0.0F, 0.4F, 0.6F, 0.3F, 0.6F);       
                renderer.renderStandardBlock(Blocks.iron_block, x, y, z);
            }
        }

        return true;
    }

    public boolean[] getConnects(IBlockAccess world, int x, int y, int z)
    {
        boolean[] connects = new boolean[6];

        if(world.getBlock(x+1, y, z) instanceof BlockConnected) connects[0] = true;
        if(world.getBlock(x-1, y, z) instanceof BlockConnected) connects[1] = true;
        if(world.getBlock(x, y+1, z) instanceof BlockConnected) connects[2] = true;
        if(world.getBlock(x, y-1, z) instanceof BlockConnected) connects[3] = true;    
        if(world.getBlock(x, y, z+1) instanceof BlockConnected) connects[4] = true;
        if(world.getBlock(x, y, z-1) instanceof BlockConnected) connects[5] = true;

        return connects;
    }

    @Override
    public boolean shouldRender3DInInventory(int modelId) 
    {
        return true;
    }

    @Override
    public int getRenderId()
    {
        return ClientProxy.renderConnectedBlockID;
    }
}

HAp4BcO.png

[merge_posts_bbcode]Добавлено: 10.02.2016 20:32:36[/merge_posts_bbcode]

Метадата для "коннектинга" с блоком (На рис. - трава, железо)
 
Назад
Сверху