Package pneumaticCraft.common.block

Source Code of pneumaticCraft.common.block.BlockPressureChamberWall

package pneumaticCraft.common.block;

import java.util.List;

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.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import pneumaticCraft.common.tileentity.TileEntityPressureChamberValve;
import pneumaticCraft.common.tileentity.TileEntityPressureChamberWall;
import pneumaticCraft.lib.Textures;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockPressureChamberWall extends BlockPneumaticCraft{

    private IIcon[] textures;
    public IIcon[] connectedIcons = new IIcon[iconRefByID.length];
    public static int[] iconRefByID = {0, 0, 6, 6, 0, 0, 6, 6, 3, 3, 19, 15, 3, 3, 19, 15, 1, 1, 18, 18, 1, 1, 13, 13, 2, 2, 23, 31, 2, 2, 27, 14, 0, 0, 6, 6, 0, 0, 6, 6, 3, 3, 19, 15, 3, 3, 19, 15, 1, 1, 18, 18, 1, 1, 13, 13, 2, 2, 23, 31, 2, 2, 27, 14, 4, 4, 5, 5, 4, 4, 5, 5, 17, 17, 22, 26, 17, 17, 22, 26, 16, 16, 20, 20, 16, 16, 28, 28, 21, 21, 46, 42, 21, 21, 43, 38, 4, 4, 5, 5, 4, 4, 5, 5, 9, 9, 30, 12, 9, 9, 30, 12, 16, 16, 20, 20, 16, 16, 28, 28, 25, 25, 45, 37, 25, 25, 40, 32, 0, 0, 6, 6, 0, 0, 6, 6, 3, 3, 19, 15, 3, 3, 19, 15, 1, 1, 18, 18, 1, 1, 13, 13, 2, 2, 23, 31, 2, 2, 27, 14, 0, 0, 6, 6, 0, 0, 6, 6, 3, 3, 19, 15, 3, 3, 19, 15, 1, 1, 18, 18, 1, 1, 13, 13, 2, 2, 23, 31, 2, 2, 27, 14, 4, 4, 5, 5, 4, 4, 5, 5, 17, 17, 22, 26, 17, 17, 22, 26, 7, 7, 24, 24, 7, 7, 10, 10, 29, 29, 44, 41, 29, 29, 39, 33, 4, 4, 5, 5, 4, 4, 5, 5, 9, 9, 30, 12, 9, 9, 30, 12, 7, 7, 24, 24, 7, 7, 10, 10, 8, 8, 36, 35, 8, 8, 34, 11};

    public BlockPressureChamberWall(Material par2Material){
        super(par2Material);
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister register){
        textures = new IIcon[8];
        String s = Textures.ICON_LOCATION + "pressureChamber/";
        textures[0] = register.registerIcon(s + "pressureChamberWall");
        textures[1] = register.registerIcon(s + "bottomLeft");
        textures[2] = register.registerIcon(s + "topLeft");
        textures[3] = register.registerIcon(s + "topRight");
        textures[4] = register.registerIcon(s + "bottomRight");
        textures[5] = register.registerIcon(s + "middleHorizontal");
        textures[6] = register.registerIcon(s + "middleVertical");
        textures[7] = register.registerIcon(s + "center");

        for(int i = 0; i < 47; i++)
            connectedIcons[i] = register.registerIcon(s + "windows/window_" + (i + 1));
    }

    @Override
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side){
        if(world.getBlockMetadata(x, y, z) > 5) return getConnectedIcon(world, x, y, z, side);
        TileEntityPressureChamberWall te = (TileEntityPressureChamberWall)world.getTileEntity(x, y, z);
        TileEntityPressureChamberValve core = te.getCore();
        if(core == null) {
            return textures[0];
        } else {
            boolean xMid = x != core.multiBlockX && x != core.multiBlockX + core.multiBlockSize - 1;
            boolean yMid = y != core.multiBlockY && y != core.multiBlockY + core.multiBlockSize - 1;
            boolean zMid = z != core.multiBlockZ && z != core.multiBlockZ + core.multiBlockSize - 1;
            if(yMid && !xMid && !zMid) return textures[6];
            if(!yMid && xMid ^ zMid) {
                if(side < 2 && zMid) {
                    return textures[6];
                } else {
                    return textures[5];
                }
            }
            if(!xMid && !yMid && !zMid) {
                boolean minX = x == core.multiBlockX;
                boolean minY = y == core.multiBlockY;
                boolean minZ = z == core.multiBlockZ;
                switch(side){
                    case 0:
                    case 1:
                        if(minX && minZ) return textures[2];
                        if(!minX && minZ) return textures[3];
                        if(minX && !minZ) return textures[1];
                        break;
                    case 2:
                        if(!minX && minY) return textures[1];
                        if(minX && !minY) return textures[3];
                        if(!minX && !minY) return textures[2];
                        break;
                    case 3:
                        if(minX && minY) return textures[1];
                        if(!minX && !minY) return textures[3];
                        if(minX && !minY) return textures[2];
                        break;
                    case 4:
                        if(minZ && minY) return textures[1];
                        if(!minZ && !minY) return textures[3];
                        if(minZ && !minY) return textures[2];
                        break;
                    case 5:
                        if(!minZ && minY) return textures[1];
                        if(minZ && !minY) return textures[3];
                        if(!minZ && !minY) return textures[2];
                        break;
                }
                return textures[4];
            }
            return textures[7];
        }
    }

    /**
     * @author amadornes , used in Blue Power, https://github.com/Qmunity/BluePower
     * modified by MineMaarten
     */
    public IIcon getConnectedIcon(IBlockAccess world, int x, int y, int z, int side){

        boolean[] bitMatrix = new boolean[8];

        if(side == 0 || side == 1) {
            bitMatrix[0] = isGlass(world, x - 1, y, z - 1);
            bitMatrix[1] = isGlass(world, x, y, z - 1);
            bitMatrix[2] = isGlass(world, x + 1, y, z - 1);
            bitMatrix[3] = isGlass(world, x - 1, y, z);
            bitMatrix[4] = isGlass(world, x + 1, y, z);
            bitMatrix[5] = isGlass(world, x - 1, y, z + 1);
            bitMatrix[6] = isGlass(world, x, y, z + 1);
            bitMatrix[7] = isGlass(world, x + 1, y, z + 1);
        }
        if(side == 2 || side == 3) {
            bitMatrix[0] = isGlass(world, x + (side == 2 ? 1 : -1), y + 1, z);
            bitMatrix[1] = isGlass(world, x, y + 1, z);
            bitMatrix[2] = isGlass(world, x + (side == 3 ? 1 : -1), y + 1, z);
            bitMatrix[3] = isGlass(world, x + (side == 2 ? 1 : -1), y, z);
            bitMatrix[4] = isGlass(world, x + (side == 3 ? 1 : -1), y, z);
            bitMatrix[5] = isGlass(world, x + (side == 2 ? 1 : -1), y - 1, z);
            bitMatrix[6] = isGlass(world, x, y - 1, z);
            bitMatrix[7] = isGlass(world, x + (side == 3 ? 1 : -1), y - 1, z);
        }
        if(side == 4 || side == 5) {
            bitMatrix[0] = isGlass(world, x, y + 1, z + (side == 5 ? 1 : -1));
            bitMatrix[1] = isGlass(world, x, y + 1, z);
            bitMatrix[2] = isGlass(world, x, y + 1, z + (side == 4 ? 1 : -1));
            bitMatrix[3] = isGlass(world, x, y, z + (side == 5 ? 1 : -1));
            bitMatrix[4] = isGlass(world, x, y, z + (side == 4 ? 1 : -1));
            bitMatrix[5] = isGlass(world, x, y - 1, z + (side == 5 ? 1 : -1));
            bitMatrix[6] = isGlass(world, x, y - 1, z);
            bitMatrix[7] = isGlass(world, x, y - 1, z + (side == 4 ? 1 : -1));
        }

        int idBuilder = 0;

        for(int i = 0; i <= 7; i++)
            idBuilder = idBuilder + (bitMatrix[i] ? i == 0 ? 1 : i == 1 ? 2 : i == 2 ? 4 : i == 3 ? 8 : i == 4 ? 16 : i == 5 ? 32 : i == 6 ? 64 : 128 : 0);

        return idBuilder > 255 || idBuilder < 0 ? connectedIcons[0] : connectedIcons[iconRefByID[idBuilder]];

    }

    private boolean isGlass(IBlockAccess world, int x, int y, int z){
        return world.getBlock(x, y, z) == this && world.getBlockMetadata(x, y, z) > 5;
    }

    @Override
    @SideOnly(Side.CLIENT)
    public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side){
        ForgeDirection d = ForgeDirection.getOrientation(side).getOpposite();
        return !isGlass(world, x + d.offsetX, y + d.offsetY, z + d.offsetZ) || !isGlass(world, x, y, z);
    }

    @Override
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int side, int meta){
        return meta > 5 ? connectedIcons[0] : textures[0];
    }

    @Override
    public boolean isOpaqueCube(){
        return false;
    }

    @Override
    protected Class<? extends TileEntity> getTileEntityClass(){
        return TileEntityPressureChamberWall.class;
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List){
        for(int var4 = 0; var4 < 2; ++var4) {
            par3List.add(new ItemStack(this, 1, var4 * 6));
        }
    }

    /**
     * Called when the block is placed in the world.
     */
    @Override
    public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLiving, ItemStack iStack){
        super.onBlockPlacedBy(par1World, par2, par3, par4, par5EntityLiving, iStack);
        TileEntityPressureChamberValve.checkIfProperlyFormed(par1World, par2, par3, par4);
    }

    @Override
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){
        if(world.isRemote) return true;
        TileEntity te = world.getTileEntity(x, y, z);
        if(te instanceof TileEntityPressureChamberWall) {
            TileEntityPressureChamberValve valve = ((TileEntityPressureChamberWall)te).getCore();
            if(valve != null) {
                return valve.getBlockType().onBlockActivated(world, valve.xCoord, valve.yCoord, valve.zCoord, player, par6, par7, par8, par9);

            }
        }
        return false;
    }

    @Override
    public void breakBlock(World world, int x, int y, int z, Block block, int meta){
        TileEntity te = world.getTileEntity(x, y, z);
        if(te instanceof TileEntityPressureChamberWall && !world.isRemote) {
            ((TileEntityPressureChamberWall)te).onBlockBreak();
        }
        super.breakBlock(world, x, y, z, block, meta);

    }

    /**
     * Determines the damage on the item the block drops. Used in cloth and
     * wood.
     */
    @Override
    public int damageDropped(int par1){
        return par1 < 6 ? 0 : 6;
    }

}
TOP

Related Classes of pneumaticCraft.common.block.BlockPressureChamberWall

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.