Jump to content

red stone wire block


majesticmadman98

Recommended Posts

ok i've got this so what part of this needs replacing to be a block over the wire

package a.sounds;

 

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Random;

import java.util.Set;

 

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.IconRegister;

import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.item.Item;

import net.minecraft.util.AxisAlignedBB;

import net.minecraft.util.Direction;

import net.minecraft.util.Icon;

import net.minecraft.world.ChunkPosition;

import net.minecraft.world.IBlockAccess;

import net.minecraft.world.World;

 

public class RedstoneConducter extends Block

{

    public RedstoneConducter(int par1, Material par2Material) {

super(par1, par2Material);

 

}

 

/**

    * When false, power transmission methods do not look at other redstone wires. Used internally during

    * updateCurrentStrength.

    */

    private boolean wiresProvidePower = true;

    private Set blocksNeedingUpdate = new HashSet();

    @SideOnly(Side.CLIENT)

    private Icon field_94413_c;

    @SideOnly(Side.CLIENT)

    private Icon field_94410_cO;

    @SideOnly(Side.CLIENT)

    private Icon field_94411_cP;

    @SideOnly(Side.CLIENT)

    private Icon field_94412_cQ;

 

    public RedstoneConducter(int par1)

    {

        super(par1, Material.circuits);

        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F);

    }

 

    /**

    * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been

    * cleared to be reused)

    */

    public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)

    {

        return null;

    }

 

    /**

    * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two

    * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.

    */

    public boolean isOpaqueCube()

    {

        return false;

    }

 

    /**

    * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)

    */

    public boolean renderAsNormalBlock()

    {

        return false;

    }

 

    /**

    * The type of render function that is called for this block

    */

    public int getRenderType()

    {

        return 5;

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns a integer with hex for 0xrrggbb with this color multiplied against the blocks color. Note only called

    * when first determining what to render.

    */

    public int colorMultiplier(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)

    {

        return 8388608;

    }

 

    /**

    * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z

    */

    public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)

    {

        return par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4) || par1World.getBlockId(par2, par3 - 1, par4) == Block.glowStone.blockID;

    }

 

    /**

    * Sets the strength of the wire current (0-15) for this block based on neighboring blocks and propagates to

    * neighboring redstone wires

    */

    private void updateAndPropagateCurrentStrength(World par1World, int par2, int par3, int par4)

    {

        this.calculateCurrentChanges(par1World, par2, par3, par4, par2, par3, par4);

        ArrayList arraylist = new ArrayList(this.blocksNeedingUpdate);

        this.blocksNeedingUpdate.clear();

 

        for (int l = 0; l < arraylist.size(); ++l)

        {

            ChunkPosition chunkposition = (ChunkPosition)arraylist.get(l);

            par1World.notifyBlocksOfNeighborChange(chunkposition.x, chunkposition.y, chunkposition.z, this.blockID);

        }

    }

 

    private void calculateCurrentChanges(World par1World, int par2, int par3, int par4, int par5, int par6, int par7)

    {

        int k1 = par1World.getBlockMetadata(par2, par3, par4);

        byte b0 = 0;

        int l1 = this.getMaxCurrentStrength(par1World, par5, par6, par7, b0);

        this.wiresProvidePower = false;

        int i2 = par1World.getStrongestIndirectPower(par2, par3, par4);

        this.wiresProvidePower = true;

 

        if (i2 > 0 && i2 > l1 - 1)

        {

            l1 = i2;

        }

 

        int j2 = 0;

 

        for (int k2 = 0; k2 < 4; ++k2)

        {

            int l2 = par2;

            int i3 = par4;

 

            if (k2 == 0)

            {

                l2 = par2 - 1;

            }

 

            if (k2 == 1)

            {

                ++l2;

            }

 

            if (k2 == 2)

            {

                i3 = par4 - 1;

            }

 

            if (k2 == 3)

            {

                ++i3;

            }

 

            if (l2 != par5 || i3 != par7)

            {

                j2 = this.getMaxCurrentStrength(par1World, l2, par3, i3, j2);

            }

 

            if (par1World.isBlockNormalCube(l2, par3, i3) && !par1World.isBlockNormalCube(par2, par3 + 1, par4))

            {

                if ((l2 != par5 || i3 != par7) && par3 >= par6)

                {

                    j2 = this.getMaxCurrentStrength(par1World, l2, par3 + 1, i3, j2);

                }

            }

            else if (!par1World.isBlockNormalCube(l2, par3, i3) && (l2 != par5 || i3 != par7) && par3 <= par6)

            {

                j2 = this.getMaxCurrentStrength(par1World, l2, par3 - 1, i3, j2);

            }

        }

 

        if (j2 > l1)

        {

            l1 = j2 - 1;

        }

        else if (l1 > 0)

        {

            --l1;

        }

        else

        {

            l1 = 0;

        }

 

        if (i2 > l1 - 1)

        {

            l1 = i2;

        }

 

        if (k1 != l1)

        {

            par1World.setBlockMetadataWithNotify(par2, par3, par4, l1, 2);

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2 - 1, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2 + 1, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3 - 1, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3 + 1, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4 - 1));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4 + 1));

        }

    }

 

    /**

    * Calls World.notifyBlocksOfNeighborChange() for all neighboring blocks, but only if the given block is a redstone

    * wire.

    */

    private void notifyWireNeighborsOfNeighborChange(World par1World, int par2, int par3, int par4)

    {

        if (par1World.getBlockId(par2, par3, par4) == this.blockID)

        {

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 - 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 + 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 - 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 + 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

        }

    }

 

    /**

    * Called whenever the block is added into the world. Args: world, x, y, z

    */

    public void onBlockAdded(World par1World, int par2, int par3, int par4)

    {

        super.onBlockAdded(par1World, par2, par3, par4);

 

        if (!par1World.isRemote)

        {

            this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 - 1);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 + 1);

 

            if (par1World.isBlockNormalCube(par2 - 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2 + 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 - 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 - 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 - 1);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 + 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 + 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 + 1);

            }

        }

    }

 

    /**

    * Called on server worlds only when the block has been replaced by a different block ID, or the same block with a

    * different metadata value, but before the new metadata value is set. Args: World, x, y, z, old block ID, old

    * metadata

    */

    public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)

    {

        super.breakBlock(par1World, par2, par3, par4, par5, par6);

 

        if (!par1World.isRemote)

        {

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 + 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 - 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 + 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 - 1, this.blockID);

            this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 - 1);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 + 1);

 

            if (par1World.isBlockNormalCube(par2 - 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2 + 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 - 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 - 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 - 1);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 + 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 + 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 + 1);

            }

        }

    }

 

    /**

    * Returns the current strength at the specified block if it is greater than the passed value, or the passed value

    * otherwise. Signature: (world, x, y, z, strength)

    */

    private int getMaxCurrentStrength(World par1World, int par2, int par3, int par4, int par5)

    {

        if (par1World.getBlockId(par2, par3, par4) != this.blockID)

        {

            return par5;

        }

        else

        {

            int i1 = par1World.getBlockMetadata(par2, par3, par4);

            return i1 > par5 ? i1 : par5;

        }

    }

 

    /**

    * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are

    * their own) Args: x, y, z, neighbor blockID

    */

    public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)

    {

        if (!par1World.isRemote)

        {

            boolean flag = this.canPlaceBlockAt(par1World, par2, par3, par4);

 

            if (flag)

            {

                this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            }

            else

            {

                this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0);

                par1World.setBlockToAir(par2, par3, par4);

            }

 

            super.onNeighborBlockChange(par1World, par2, par3, par4, par5);

        }

    }

 

    /**

    * Returns the ID of the items to drop on destruction.

    */

    public int idDropped(int par1, Random par2Random, int par3)

    {

        return Item.redstone.itemID;

    }

 

    /**

    * Returns true if the block is emitting direct/strong redstone power on the specified side. Args: World, X, Y, Z,

    * side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block.

    */

    public int isProvidingStrongPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        return !this.wiresProvidePower ? 0 : this.isProvidingWeakPower(par1IBlockAccess, par2, par3, par4, par5);

    }

 

    /**

    * Returns true if the block is emitting indirect/weak redstone power on the specified side. If isBlockNormalCube

    * returns true, standard redstone propagation rules will apply instead and this will not be called. Args: World, X,

    * Y, Z, side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block.

    */

    public int isProvidingWeakPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        if (!this.wiresProvidePower)

        {

            return 0;

        }

        else

        {

            int i1 = par1IBlockAccess.getBlockMetadata(par2, par3, par4);

 

            if (i1 == 0)

            {

                return 0;

            }

            else if (par5 == 1)

            {

                return i1;

            }

            else

            {

                boolean flag = isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3, par4, 1) || !par1IBlockAccess.isBlockNormalCube(par2 - 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3 - 1, par4, -1);

                boolean flag1 = isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3, par4, 3) || !par1IBlockAccess.isBlockNormalCube(par2 + 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3 - 1, par4, -1);

                boolean flag2 = isPoweredOrRepeater(par1IBlockAccess, par2, par3, par4 - 1, 2) || !par1IBlockAccess.isBlockNormalCube(par2, par3, par4 - 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 - 1, par4 - 1, -1);

                boolean flag3 = isPoweredOrRepeater(par1IBlockAccess, par2, par3, par4 + 1, 0) || !par1IBlockAccess.isBlockNormalCube(par2, par3, par4 + 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 - 1, par4 + 1, -1);

 

                if (!par1IBlockAccess.isBlockNormalCube(par2, par3 + 1, par4))

                {

                    if (par1IBlockAccess.isBlockNormalCube(par2 - 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3 + 1, par4, -1))

                    {

                        flag = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2 + 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3 + 1, par4, -1))

                    {

                        flag1 = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2, par3, par4 - 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 + 1, par4 - 1, -1))

                    {

                        flag2 = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2, par3, par4 + 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 + 1, par4 + 1, -1))

                    {

                        flag3 = true;

                    }

                }

 

                return !flag2 && !flag1 && !flag && !flag3 && par5 >= 2 && par5 <= 5 ? i1 : (par5 == 2 && flag2 && !flag && !flag1 ? i1 : (par5 == 3 && flag3 && !flag && !flag1 ? i1 : (par5 == 4 && flag && !flag2 && !flag3 ? i1 : (par5 == 5 && flag1 && !flag2 && !flag3 ? i1 : 0))));

            }

        }

    }

 

    /**

    * Can this block provide power. Only wire currently seems to have this change based on its state.

    */

    public boolean canProvidePower()

    {

        return this.wiresProvidePower;

    }

 

    /**

    * Returns true if redstone wire can connect to the specified block. Params: World, X, Y, Z, side (not a normal

    * notch-side, this can be 0, 1, 2, 3 or -1)

    */

    public static boolean isPowerProviderOrWire(IBlockAccess par0IBlockAccess, int par1, int par2, int par3, int par4)

    {

        int i1 = par0IBlockAccess.getBlockId(par1, par2, par3);

 

        if (i1 == Block.redstoneWire.blockID)

        {

            return true;

        }

        else if (i1 == 0)

        {

            return false;

        }

        else if (!Block.redstoneRepeaterIdle.func_94487_f(i1))

        {

            return (Block.blocksList[i1] != null && Block.blocksList[i1].canConnectRedstone(par0IBlockAccess, par1, par2, par3, par4));

        }

        else

        {

            int j1 = par0IBlockAccess.getBlockMetadata(par1, par2, par3);

            return par4 == (j1 & 3) || par4 == Direction.rotateOpposite[j1 & 3];

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * A randomly called display update to be able to add particles or other items for display

    */

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        int l = par1World.getBlockMetadata(par2, par3, par4);

 

        if (l > 0)

        {

            double d0 = (double)par2 + 0.5D + ((double)par5Random.nextFloat() - 0.5D) * 0.2D;

            double d1 = (double)((float)par3 + 0.0625F);

            double d2 = (double)par4 + 0.5D + ((double)par5Random.nextFloat() - 0.5D) * 0.2D;

            float f = (float)l / 15.0F;

            float f1 = f * 0.6F + 0.4F;

 

            if (l == 0)

            {

                f1 = 0.0F;

            }

 

            float f2 = f * f * 0.7F - 0.5F;

            float f3 = f * f * 0.6F - 0.7F;

 

            if (f2 < 0.0F)

            {

                f2 = 0.0F;

            }

 

            if (f3 < 0.0F)

            {

                f3 = 0.0F;

            }

 

            par1World.spawnParticle("reddust", d0, d1, d2, (double)f1, (double)f2, (double)f3);

        }

    }

 

    /**

    * Returns true if the block coordinate passed can provide power, or is a redstone wire, or if its a repeater that

    * is powered.

    */

    public static boolean isPoweredOrRepeater(IBlockAccess par0IBlockAccess, int par1, int par2, int par3, int par4)

    {

        if (isPowerProviderOrWire(par0IBlockAccess, par1, par2, par3, par4))

        {

            return true;

        }

        else

        {

            int i1 = par0IBlockAccess.getBlockId(par1, par2, par3);

 

            if (i1 == Block.redstoneRepeaterActive.blockID)

            {

                int j1 = par0IBlockAccess.getBlockMetadata(par1, par2, par3);

                return par4 == (j1 & 3);

            }

            else

            {

                return false;

            }

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)

    */

    public int idPicked(World par1World, int par2, int par3, int par4)

    {

        return Item.redstone.itemID;

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * When this method is called, your block should register all the icons it needs with the given IconRegister. This

    * is the only chance you get to register icons.

    */

    public void registerIcons(IconRegister par1IconRegister)

    {

        this.field_94413_c = par1IconRegister.registerIcon(this.getTextureName() + "_" + "cross");

        this.field_94410_cO = par1IconRegister.registerIcon(this.getTextureName() + "_" + "line");

        this.field_94411_cP = par1IconRegister.registerIcon(this.getTextureName() + "_" + "cross_overlay");

        this.field_94412_cQ = par1IconRegister.registerIcon(this.getTextureName() + "_" + "line_overlay");

        this.blockIcon = this.field_94413_c;

    }

 

    @SideOnly(Side.CLIENT)

    public static Icon getRedstoneWireIcon(String par0Str)

    {

        return par0Str.equals("cross") ? Block.redstoneWire.field_94413_c : (par0Str.equals("line") ? Block.redstoneWire.field_94410_cO : (par0Str.equals("cross_overlay") ? Block.redstoneWire.field_94411_cP : (par0Str.equals("line_overlay") ? Block.redstoneWire.field_94412_cQ : null)));

    }

}

 

 

Link to comment
Share on other sites

To make it pushable, change its material type from Circuits to Rock

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

ok thanks to make this render as a block not like the wire can i remove the render method and texture stuff and re-do the textures as if a normal block

public void registerIcons(IconRegister par1IconRegister)
    {
        this.field_94413_c = par1IconRegister.registerIcon(this.getTextureName() + "_" + "cross");
        this.field_94410_cO = par1IconRegister.registerIcon(this.getTextureName() + "_" + "line");
        this.field_94411_cP = par1IconRegister.registerIcon(this.getTextureName() + "_" + "cross_overlay");
        this.field_94412_cQ = par1IconRegister.registerIcon(this.getTextureName() + "_" + "line_overlay");
        this.blockIcon = this.field_94413_c;
    }

    @SideOnly(Side.CLIENT)
    public static Icon getRedstoneWireIcon(String par0Str)
    {
        return par0Str.equals("cross") ? Block.redstoneWire.field_94413_c : (par0Str.equals("line") ? Block.redstoneWire.field_94410_cO : (par0Str.equals("cross_overlay") ? Block.redstoneWire.field_94411_cP : (par0Str.equals("line_overlay") ? Block.redstoneWire.field_94412_cQ : null)));
    }
}

 

and this

 

/**
     * The type of render function that is called for this block
     */
    public int getRenderType()
    {
        return 5;
    }

Link to comment
Share on other sites

ok it's now a block and  textured but the block is destroyed when the block underneath is removed.

package a.sounds;

 

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Random;

import java.util.Set;

 

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.IconRegister;

import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.item.Item;

import net.minecraft.util.AxisAlignedBB;

import net.minecraft.util.Direction;

import net.minecraft.util.Icon;

import net.minecraft.world.ChunkPosition;

import net.minecraft.world.IBlockAccess;

import net.minecraft.world.World;

 

public class RedstoneConducter extends Block

{

    public RedstoneConducter(int par1, Material par2Material) {

super(par1, par2Material);

 

}

 

/**

    * When false, power transmission methods do not look at other redstone wires. Used internally during

    * updateCurrentStrength.

    */

    private boolean wiresProvidePower = true;

    private Set blocksNeedingUpdate = new HashSet();

    @SideOnly(Side.CLIENT)

    private Icon field_94413_c;

    @SideOnly(Side.CLIENT)

    private Icon field_94410_cO;

    @SideOnly(Side.CLIENT)

    private Icon field_94411_cP;

    @SideOnly(Side.CLIENT)

    private Icon field_94412_cQ;

 

    public RedstoneConducter(int par1)

    {

        super(par1, Material.wood);

        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F);

    }

 

    /**

    * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been

    * cleared to be reused)

    */

    public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)

    {

        return null;

    }

 

    /**

    * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two

    * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.

    */

    public boolean isOpaqueCube()

    {

        return false;

    }

 

    /**

    * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)

    */

    public boolean renderAsNormalBlock()

    {

        return false;

    }

 

    /**

    * The type of render function that is called for this block

    */

   

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns a integer with hex for 0xrrggbb with this color multiplied against the blocks color. Note only called

    * when first determining what to render.

    */

    public int colorMultiplier(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)

    {

        return 8388608;

    }

 

    /**

    * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z

    */

    public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)

    {

        return par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4) || par1World.getBlockId(par2, par3 - 1, par4) == Block.glowStone.blockID;

    }

 

    /**

    * Sets the strength of the wire current (0-15) for this block based on neighboring blocks and propagates to

    * neighboring redstone wires

    */

    private void updateAndPropagateCurrentStrength(World par1World, int par2, int par3, int par4)

    {

        this.calculateCurrentChanges(par1World, par2, par3, par4, par2, par3, par4);

        ArrayList arraylist = new ArrayList(this.blocksNeedingUpdate);

        this.blocksNeedingUpdate.clear();

 

        for (int l = 0; l < arraylist.size(); ++l)

        {

            ChunkPosition chunkposition = (ChunkPosition)arraylist.get(l);

            par1World.notifyBlocksOfNeighborChange(chunkposition.x, chunkposition.y, chunkposition.z, this.blockID);

        }

    }

 

    private void calculateCurrentChanges(World par1World, int par2, int par3, int par4, int par5, int par6, int par7)

    {

        int k1 = par1World.getBlockMetadata(par2, par3, par4);

        byte b0 = 0;

        int l1 = this.getMaxCurrentStrength(par1World, par5, par6, par7, b0);

        this.wiresProvidePower = false;

        int i2 = par1World.getStrongestIndirectPower(par2, par3, par4);

        this.wiresProvidePower = true;

 

        if (i2 > 0 && i2 > l1 - 1)

        {

            l1 = i2;

        }

 

        int j2 = 0;

 

        for (int k2 = 0; k2 < 4; ++k2)

        {

            int l2 = par2;

            int i3 = par4;

 

            if (k2 == 0)

            {

                l2 = par2 - 1;

            }

 

            if (k2 == 1)

            {

                ++l2;

            }

 

            if (k2 == 2)

            {

                i3 = par4 - 1;

            }

 

            if (k2 == 3)

            {

                ++i3;

            }

 

            if (l2 != par5 || i3 != par7)

            {

                j2 = this.getMaxCurrentStrength(par1World, l2, par3, i3, j2);

            }

 

            if (par1World.isBlockNormalCube(l2, par3, i3) && !par1World.isBlockNormalCube(par2, par3 + 1, par4))

            {

                if ((l2 != par5 || i3 != par7) && par3 >= par6)

                {

                    j2 = this.getMaxCurrentStrength(par1World, l2, par3 + 1, i3, j2);

                }

            }

            else if (!par1World.isBlockNormalCube(l2, par3, i3) && (l2 != par5 || i3 != par7) && par3 <= par6)

            {

                j2 = this.getMaxCurrentStrength(par1World, l2, par3 - 1, i3, j2);

            }

        }

 

        if (j2 > l1)

        {

            l1 = j2 - 1;

        }

        else if (l1 > 0)

        {

            --l1;

        }

        else

        {

            l1 = 0;

        }

 

        if (i2 > l1 - 1)

        {

            l1 = i2;

        }

 

        if (k1 != l1)

        {

            par1World.setBlockMetadataWithNotify(par2, par3, par4, l1, 2);

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2 - 1, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2 + 1, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3 - 1, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3 + 1, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4 - 1));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4 + 1));

        }

    }

 

    /**

    * Calls World.notifyBlocksOfNeighborChange() for all neighboring blocks, but only if the given block is a redstone

    * wire.

    */

    private void notifyWireNeighborsOfNeighborChange(World par1World, int par2, int par3, int par4)

    {

        if (par1World.getBlockId(par2, par3, par4) == this.blockID)

        {

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 - 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 + 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 - 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 + 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

        }

    }

 

    /**

    * Called whenever the block is added into the world. Args: world, x, y, z

    */

    public void onBlockAdded(World par1World, int par2, int par3, int par4)

    {

        super.onBlockAdded(par1World, par2, par3, par4);

 

        if (!par1World.isRemote)

        {

            this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 - 1);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 + 1);

 

            if (par1World.isBlockNormalCube(par2 - 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2 + 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 - 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 - 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 - 1);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 + 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 + 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 + 1);

            }

        }

    }

 

    /**

    * Called on server worlds only when the block has been replaced by a different block ID, or the same block with a

    * different metadata value, but before the new metadata value is set. Args: World, x, y, z, old block ID, old

    * metadata

    */

    public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)

    {

        super.breakBlock(par1World, par2, par3, par4, par5, par6);

 

        if (!par1World.isRemote)

        {

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 + 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 - 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 + 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 - 1, this.blockID);

            this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 - 1);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 + 1);

 

            if (par1World.isBlockNormalCube(par2 - 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2 + 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 - 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 - 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 - 1);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 + 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 + 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 + 1);

            }

        }

    }

 

    /**

    * Returns the current strength at the specified block if it is greater than the passed value, or the passed value

    * otherwise. Signature: (world, x, y, z, strength)

    */

    private int getMaxCurrentStrength(World par1World, int par2, int par3, int par4, int par5)

    {

        if (par1World.getBlockId(par2, par3, par4) != this.blockID)

        {

            return par5;

        }

        else

        {

            int i1 = par1World.getBlockMetadata(par2, par3, par4);

            return i1 > par5 ? i1 : par5;

        }

    }

 

    /**

    * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are

    * their own) Args: x, y, z, neighbor blockID

    */

    public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)

    {

        if (!par1World.isRemote)

        {

            boolean flag = this.canPlaceBlockAt(par1World, par2, par3, par4);

 

            if (flag)

            {

                this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            }

            else

            {

                this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0);

                par1World.setBlockToAir(par2, par3, par4);

            }

 

            super.onNeighborBlockChange(par1World, par2, par3, par4, par5);

        }

    }

 

   

 

    /**

    * Returns true if the block is emitting direct/strong redstone power on the specified side. Args: World, X, Y, Z,

    * side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block.

    */

    public int isProvidingStrongPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        return !this.wiresProvidePower ? 0 : this.isProvidingWeakPower(par1IBlockAccess, par2, par3, par4, par5);

    }

 

    /**

    * Returns true if the block is emitting indirect/weak redstone power on the specified side. If isBlockNormalCube

    * returns true, standard redstone propagation rules will apply instead and this will not be called. Args: World, X,

    * Y, Z, side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block.

    */

    public int isProvidingWeakPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        if (!this.wiresProvidePower)

        {

            return 0;

        }

        else

        {

            int i1 = par1IBlockAccess.getBlockMetadata(par2, par3, par4);

 

            if (i1 == 0)

            {

                return 0;

            }

            else if (par5 == 1)

            {

                return i1;

            }

            else

            {

                boolean flag = isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3, par4, 1) || !par1IBlockAccess.isBlockNormalCube(par2 - 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3 - 1, par4, -1);

                boolean flag1 = isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3, par4, 3) || !par1IBlockAccess.isBlockNormalCube(par2 + 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3 - 1, par4, -1);

                boolean flag2 = isPoweredOrRepeater(par1IBlockAccess, par2, par3, par4 - 1, 2) || !par1IBlockAccess.isBlockNormalCube(par2, par3, par4 - 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 - 1, par4 - 1, -1);

                boolean flag3 = isPoweredOrRepeater(par1IBlockAccess, par2, par3, par4 + 1, 0) || !par1IBlockAccess.isBlockNormalCube(par2, par3, par4 + 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 - 1, par4 + 1, -1);

 

                if (!par1IBlockAccess.isBlockNormalCube(par2, par3 + 1, par4))

                {

                    if (par1IBlockAccess.isBlockNormalCube(par2 - 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3 + 1, par4, -1))

                    {

                        flag = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2 + 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3 + 1, par4, -1))

                    {

                        flag1 = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2, par3, par4 - 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 + 1, par4 - 1, -1))

                    {

                        flag2 = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2, par3, par4 + 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 + 1, par4 + 1, -1))

                    {

                        flag3 = true;

                    }

                }

 

                return !flag2 && !flag1 && !flag && !flag3 && par5 >= 2 && par5 <= 5 ? i1 : (par5 == 2 && flag2 && !flag && !flag1 ? i1 : (par5 == 3 && flag3 && !flag && !flag1 ? i1 : (par5 == 4 && flag && !flag2 && !flag3 ? i1 : (par5 == 5 && flag1 && !flag2 && !flag3 ? i1 : 0))));

            }

        }

    }

 

    /**

    * Can this block provide power. Only wire currently seems to have this change based on its state.

    */

    public boolean canProvidePower()

    {

        return this.wiresProvidePower;

    }

 

    /**

    * Returns true if redstone wire can connect to the specified block. Params: World, X, Y, Z, side (not a normal

    * notch-side, this can be 0, 1, 2, 3 or -1)

    */

    public static boolean isPowerProviderOrWire(IBlockAccess par0IBlockAccess, int par1, int par2, int par3, int par4)

    {

        int i1 = par0IBlockAccess.getBlockId(par1, par2, par3);

 

        if (i1 == Block.redstoneWire.blockID)

        {

            return true;

        }

        else if (i1 == 0)

        {

            return false;

        }

        else if (!Block.redstoneRepeaterIdle.func_94487_f(i1))

        {

            return (Block.blocksList[i1] != null && Block.blocksList[i1].canConnectRedstone(par0IBlockAccess, par1, par2, par3, par4));

        }

        else

        {

            int j1 = par0IBlockAccess.getBlockMetadata(par1, par2, par3);

            return par4 == (j1 & 3) || par4 == Direction.rotateOpposite[j1 & 3];

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * A randomly called display update to be able to add particles or other items for display

    */

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        int l = par1World.getBlockMetadata(par2, par3, par4);

 

        if (l > 0)

        {

            double d0 = (double)par2 + 0.5D + ((double)par5Random.nextFloat() - 0.5D) * 0.2D;

            double d1 = (double)((float)par3 + 0.0625F);

            double d2 = (double)par4 + 0.5D + ((double)par5Random.nextFloat() - 0.5D) * 0.2D;

            float f = (float)l / 15.0F;

            float f1 = f * 0.6F + 0.4F;

 

            if (l == 0)

            {

                f1 = 0.0F;

            }

 

            float f2 = f * f * 0.7F - 0.5F;

            float f3 = f * f * 0.6F - 0.7F;

 

            if (f2 < 0.0F)

            {

                f2 = 0.0F;

            }

 

            if (f3 < 0.0F)

            {

                f3 = 0.0F;

            }

 

            par1World.spawnParticle("reddust", d0, d1, d2, (double)f1, (double)f2, (double)f3);

        }

    }

 

    /**

    * Returns true if the block coordinate passed can provide power, or is a redstone wire, or if its a repeater that

    * is powered.

    */

    public static boolean isPoweredOrRepeater(IBlockAccess par0IBlockAccess, int par1, int par2, int par3, int par4)

    {

        if (isPowerProviderOrWire(par0IBlockAccess, par1, par2, par3, par4))

        {

            return true;

        }

        else

        {

            int i1 = par0IBlockAccess.getBlockId(par1, par2, par3);

 

            if (i1 == Block.redstoneRepeaterActive.blockID)

            {

                int j1 = par0IBlockAccess.getBlockMetadata(par1, par2, par3);

                return par4 == (j1 & 3);

            }

            else

            {

                return false;

            }

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)

    */

    public int idPicked(World par1World, int par2, int par3, int par4)

    {

        return Item.redstone.itemID;

    }

 

 

 

    /**

    * When this method is called, your block should register all the icons it needs with the given IconRegister. This

    * is the only chance you get to register icons.

    */

    @SideOnly(Side.CLIENT)

public void registerIcons(IconRegister par1IconRegister){

this.blockIcon = par1IconRegister.registerIcon("oomod:RedstoneConducter");

}

 

    }

 

 

 

Link to comment
Share on other sites

Fix canPlaceBlockAt to return true.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

also this one

 public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)
    {
        if (!par1World.isRemote)
        {
            boolean flag = this.canPlaceBlockAt(par1World, par2, par3, par4);

            if (flag)
            {
                this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);
            }
            else
            {
                this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0);
                par1World.setBlockToAir(par2, par3, par4);
            }

            super.onNeighborBlockChange(par1World, par2, par3, par4, par5);
        }
    }

 

or this one

public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)
    {
        return par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4) || par1World.getBlockId(par2, par3 - 1, par4) == Block.glowStone.blockID;
    }

Link to comment
Share on other sites

bit off topic but does eclipse have a search for text option?

 

Yes.

 

Search -> Text -> Find in Workspace

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

package net.minecraft.block;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Direction;
import net.minecraft.util.IIcon;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class BlockRedstoneWire extends Block
{
    private boolean field_150181_a = true;
    private Set field_150179_b = new HashSet();
    @SideOnly(Side.CLIENT)
    private IIcon field_150182_M;
    @SideOnly(Side.CLIENT)
    private IIcon field_150183_N;
    @SideOnly(Side.CLIENT)
    private IIcon field_150184_O;
    @SideOnly(Side.CLIENT)
    private IIcon field_150180_P;
    private static final String __OBFID = "CL_00000295";

    public BlockRedstoneWire()
    {
        super(Material.circuits);
        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F);
    }

    /**
     * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been
     * cleared to be reused)
     */
    public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_)
    {
        return null;
    }

    /**
     * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
     * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
     */
    public boolean isOpaqueCube()
    {
        return false;
    }

    /**
     * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
     */
    public boolean renderAsNormalBlock()
    {
        return false;
    }

    /**
     * The type of render function that is called for this block
     */
    public int getRenderType()
    {
        return 5;
    }

    /**
     * Returns a integer with hex for 0xrrggbb with this color multiplied against the blocks color. Note only called
     * when first determining what to render.
     */
    @SideOnly(Side.CLIENT)
    public int colorMultiplier(IBlockAccess p_149720_1_, int p_149720_2_, int p_149720_3_, int p_149720_4_)
    {
        return 8388608;
    }

    /**
     * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z
     */
    public boolean canPlaceBlockAt(World p_149742_1_, int p_149742_2_, int p_149742_3_, int p_149742_4_)
    {
        return World.doesBlockHaveSolidTopSurface(p_149742_1_, p_149742_2_, p_149742_3_ - 1, p_149742_4_) || p_149742_1_.getBlock(p_149742_2_, p_149742_3_ - 1, p_149742_4_) == Blocks.glowstone;
    }

    private void func_150177_e(World p_150177_1_, int p_150177_2_, int p_150177_3_, int p_150177_4_)
    {
        this.func_150175_a(p_150177_1_, p_150177_2_, p_150177_3_, p_150177_4_, p_150177_2_, p_150177_3_, p_150177_4_);
        ArrayList arraylist = new ArrayList(this.field_150179_b);
        this.field_150179_b.clear();

        for (int l = 0; l < arraylist.size(); ++l)
        {
            ChunkPosition chunkposition = (ChunkPosition)arraylist.get(l);
            p_150177_1_.notifyBlocksOfNeighborChange(chunkposition.chunkPosX, chunkposition.chunkPosY, chunkposition.chunkPosZ, this);
        }
    }

    private void func_150175_a(World p_150175_1_, int p_150175_2_, int p_150175_3_, int p_150175_4_, int p_150175_5_, int p_150175_6_, int p_150175_7_)
    {
        int k1 = p_150175_1_.getBlockMetadata(p_150175_2_, p_150175_3_, p_150175_4_);
        byte b0 = 0;
        int i3 = this.func_150178_a(p_150175_1_, p_150175_5_, p_150175_6_, p_150175_7_, b0);
        this.field_150181_a = false;
        int l1 = p_150175_1_.getStrongestIndirectPower(p_150175_2_, p_150175_3_, p_150175_4_);
        this.field_150181_a = true;

        if (l1 > 0 && l1 > i3 - 1)
        {
            i3 = l1;
        }

        int i2 = 0;

        for (int j2 = 0; j2 < 4; ++j2)
        {
            int k2 = p_150175_2_;
            int l2 = p_150175_4_;

            if (j2 == 0)
            {
                k2 = p_150175_2_ - 1;
            }

            if (j2 == 1)
            {
                ++k2;
            }

            if (j2 == 2)
            {
                l2 = p_150175_4_ - 1;
            }

            if (j2 == 3)
            {
                ++l2;
            }

            if (k2 != p_150175_5_ || l2 != p_150175_7_)
            {
                i2 = this.func_150178_a(p_150175_1_, k2, p_150175_3_, l2, i2);
            }

            if (p_150175_1_.getBlock(k2, p_150175_3_, l2).isNormalCube() && !p_150175_1_.getBlock(p_150175_2_, p_150175_3_ + 1, p_150175_4_).isNormalCube())
            {
                if ((k2 != p_150175_5_ || l2 != p_150175_7_) && p_150175_3_ >= p_150175_6_)
                {
                    i2 = this.func_150178_a(p_150175_1_, k2, p_150175_3_ + 1, l2, i2);
                }
            }
            else if (!p_150175_1_.getBlock(k2, p_150175_3_, l2).isNormalCube() && (k2 != p_150175_5_ || l2 != p_150175_7_) && p_150175_3_ <= p_150175_6_)
            {
                i2 = this.func_150178_a(p_150175_1_, k2, p_150175_3_ - 1, l2, i2);
            }
        }

        if (i2 > i3)
        {
            i3 = i2 - 1;
        }
        else if (i3 > 0)
        {
            --i3;
        }
        else
        {
            i3 = 0;
        }

        if (l1 > i3 - 1)
        {
            i3 = l1;
        }

        if (k1 != i3)
        {
            p_150175_1_.setBlockMetadataWithNotify(p_150175_2_, p_150175_3_, p_150175_4_, i3, 2);
            this.field_150179_b.add(new ChunkPosition(p_150175_2_, p_150175_3_, p_150175_4_));
            this.field_150179_b.add(new ChunkPosition(p_150175_2_ - 1, p_150175_3_, p_150175_4_));
            this.field_150179_b.add(new ChunkPosition(p_150175_2_ + 1, p_150175_3_, p_150175_4_));
            this.field_150179_b.add(new ChunkPosition(p_150175_2_, p_150175_3_ - 1, p_150175_4_));
            this.field_150179_b.add(new ChunkPosition(p_150175_2_, p_150175_3_ + 1, p_150175_4_));
            this.field_150179_b.add(new ChunkPosition(p_150175_2_, p_150175_3_, p_150175_4_ - 1));
            this.field_150179_b.add(new ChunkPosition(p_150175_2_, p_150175_3_, p_150175_4_ + 1));
        }
    }

    private void func_150172_m(World p_150172_1_, int p_150172_2_, int p_150172_3_, int p_150172_4_)
    {
        if (p_150172_1_.getBlock(p_150172_2_, p_150172_3_, p_150172_4_) == this)
        {
            p_150172_1_.notifyBlocksOfNeighborChange(p_150172_2_, p_150172_3_, p_150172_4_, this);
            p_150172_1_.notifyBlocksOfNeighborChange(p_150172_2_ - 1, p_150172_3_, p_150172_4_, this);
            p_150172_1_.notifyBlocksOfNeighborChange(p_150172_2_ + 1, p_150172_3_, p_150172_4_, this);
            p_150172_1_.notifyBlocksOfNeighborChange(p_150172_2_, p_150172_3_, p_150172_4_ - 1, this);
            p_150172_1_.notifyBlocksOfNeighborChange(p_150172_2_, p_150172_3_, p_150172_4_ + 1, this);
            p_150172_1_.notifyBlocksOfNeighborChange(p_150172_2_, p_150172_3_ - 1, p_150172_4_, this);
            p_150172_1_.notifyBlocksOfNeighborChange(p_150172_2_, p_150172_3_ + 1, p_150172_4_, this);
        }
    }

    /**
     * Called whenever the block is added into the world. Args: world, x, y, z
     */
    public void onBlockAdded(World p_149726_1_, int p_149726_2_, int p_149726_3_, int p_149726_4_)
    {
        super.onBlockAdded(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_);

        if (!p_149726_1_.isRemote)
        {
            this.func_150177_e(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_);
            p_149726_1_.notifyBlocksOfNeighborChange(p_149726_2_, p_149726_3_ + 1, p_149726_4_, this);
            p_149726_1_.notifyBlocksOfNeighborChange(p_149726_2_, p_149726_3_ - 1, p_149726_4_, this);
            this.func_150172_m(p_149726_1_, p_149726_2_ - 1, p_149726_3_, p_149726_4_);
            this.func_150172_m(p_149726_1_, p_149726_2_ + 1, p_149726_3_, p_149726_4_);
            this.func_150172_m(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_ - 1);
            this.func_150172_m(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_ + 1);

            if (p_149726_1_.getBlock(p_149726_2_ - 1, p_149726_3_, p_149726_4_).isNormalCube())
            {
                this.func_150172_m(p_149726_1_, p_149726_2_ - 1, p_149726_3_ + 1, p_149726_4_);
            }
            else
            {
                this.func_150172_m(p_149726_1_, p_149726_2_ - 1, p_149726_3_ - 1, p_149726_4_);
            }

            if (p_149726_1_.getBlock(p_149726_2_ + 1, p_149726_3_, p_149726_4_).isNormalCube())
            {
                this.func_150172_m(p_149726_1_, p_149726_2_ + 1, p_149726_3_ + 1, p_149726_4_);
            }
            else
            {
                this.func_150172_m(p_149726_1_, p_149726_2_ + 1, p_149726_3_ - 1, p_149726_4_);
            }

            if (p_149726_1_.getBlock(p_149726_2_, p_149726_3_, p_149726_4_ - 1).isNormalCube())
            {
                this.func_150172_m(p_149726_1_, p_149726_2_, p_149726_3_ + 1, p_149726_4_ - 1);
            }
            else
            {
                this.func_150172_m(p_149726_1_, p_149726_2_, p_149726_3_ - 1, p_149726_4_ - 1);
            }

            if (p_149726_1_.getBlock(p_149726_2_, p_149726_3_, p_149726_4_ + 1).isNormalCube())
            {
                this.func_150172_m(p_149726_1_, p_149726_2_, p_149726_3_ + 1, p_149726_4_ + 1);
            }
            else
            {
                this.func_150172_m(p_149726_1_, p_149726_2_, p_149726_3_ - 1, p_149726_4_ + 1);
            }
        }
    }

    public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_)
    {
        super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_);

        if (!p_149749_1_.isRemote)
        {
            p_149749_1_.notifyBlocksOfNeighborChange(p_149749_2_, p_149749_3_ + 1, p_149749_4_, this);
            p_149749_1_.notifyBlocksOfNeighborChange(p_149749_2_, p_149749_3_ - 1, p_149749_4_, this);
            p_149749_1_.notifyBlocksOfNeighborChange(p_149749_2_ + 1, p_149749_3_, p_149749_4_, this);
            p_149749_1_.notifyBlocksOfNeighborChange(p_149749_2_ - 1, p_149749_3_, p_149749_4_, this);
            p_149749_1_.notifyBlocksOfNeighborChange(p_149749_2_, p_149749_3_, p_149749_4_ + 1, this);
            p_149749_1_.notifyBlocksOfNeighborChange(p_149749_2_, p_149749_3_, p_149749_4_ - 1, this);
            this.func_150177_e(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_);
            this.func_150172_m(p_149749_1_, p_149749_2_ - 1, p_149749_3_, p_149749_4_);
            this.func_150172_m(p_149749_1_, p_149749_2_ + 1, p_149749_3_, p_149749_4_);
            this.func_150172_m(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_ - 1);
            this.func_150172_m(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_ + 1);

            if (p_149749_1_.getBlock(p_149749_2_ - 1, p_149749_3_, p_149749_4_).isNormalCube())
            {
                this.func_150172_m(p_149749_1_, p_149749_2_ - 1, p_149749_3_ + 1, p_149749_4_);
            }
            else
            {
                this.func_150172_m(p_149749_1_, p_149749_2_ - 1, p_149749_3_ - 1, p_149749_4_);
            }

            if (p_149749_1_.getBlock(p_149749_2_ + 1, p_149749_3_, p_149749_4_).isNormalCube())
            {
                this.func_150172_m(p_149749_1_, p_149749_2_ + 1, p_149749_3_ + 1, p_149749_4_);
            }
            else
            {
                this.func_150172_m(p_149749_1_, p_149749_2_ + 1, p_149749_3_ - 1, p_149749_4_);
            }

            if (p_149749_1_.getBlock(p_149749_2_, p_149749_3_, p_149749_4_ - 1).isNormalCube())
            {
                this.func_150172_m(p_149749_1_, p_149749_2_, p_149749_3_ + 1, p_149749_4_ - 1);
            }
            else
            {
                this.func_150172_m(p_149749_1_, p_149749_2_, p_149749_3_ - 1, p_149749_4_ - 1);
            }

            if (p_149749_1_.getBlock(p_149749_2_, p_149749_3_, p_149749_4_ + 1).isNormalCube())
            {
                this.func_150172_m(p_149749_1_, p_149749_2_, p_149749_3_ + 1, p_149749_4_ + 1);
            }
            else
            {
                this.func_150172_m(p_149749_1_, p_149749_2_, p_149749_3_ - 1, p_149749_4_ + 1);
            }
        }
    }

    private int func_150178_a(World p_150178_1_, int p_150178_2_, int p_150178_3_, int p_150178_4_, int p_150178_5_)
    {
        if (p_150178_1_.getBlock(p_150178_2_, p_150178_3_, p_150178_4_) != this)
        {
            return p_150178_5_;
        }
        else
        {
            int i1 = p_150178_1_.getBlockMetadata(p_150178_2_, p_150178_3_, p_150178_4_);
            return i1 > p_150178_5_ ? i1 : p_150178_5_;
        }
    }

    /**
     * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are
     * their own) Args: x, y, z, neighbor Block
     */
    public void onNeighborBlockChange(World p_149695_1_, int p_149695_2_, int p_149695_3_, int p_149695_4_, Block p_149695_5_)
    {
        if (!p_149695_1_.isRemote)
        {
            boolean flag = this.canPlaceBlockAt(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_);

            if (flag)
            {
                this.func_150177_e(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_);
            }
            else
            {
                this.dropBlockAsItem(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_, 0, 0);
                p_149695_1_.setBlockToAir(p_149695_2_, p_149695_3_, p_149695_4_);
            }

            super.onNeighborBlockChange(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_, p_149695_5_);
        }
    }

    public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_)
    {
        return Items.redstone;
    }

    public int isProvidingStrongPower(IBlockAccess p_149748_1_, int p_149748_2_, int p_149748_3_, int p_149748_4_, int p_149748_5_)
    {
        return !this.field_150181_a ? 0 : this.isProvidingWeakPower(p_149748_1_, p_149748_2_, p_149748_3_, p_149748_4_, p_149748_5_);
    }

    public int isProvidingWeakPower(IBlockAccess p_149709_1_, int p_149709_2_, int p_149709_3_, int p_149709_4_, int p_149709_5_)
    {
        if (!this.field_150181_a)
        {
            return 0;
        }
        else
        {
            int i1 = p_149709_1_.getBlockMetadata(p_149709_2_, p_149709_3_, p_149709_4_);

            if (i1 == 0)
            {
                return 0;
            }
            else if (p_149709_5_ == 1)
            {
                return i1;
            }
            else
            {
                boolean flag = func_150176_g(p_149709_1_, p_149709_2_ - 1, p_149709_3_, p_149709_4_, 1) || !p_149709_1_.getBlock(p_149709_2_ - 1, p_149709_3_, p_149709_4_).isNormalCube() && func_150176_g(p_149709_1_, p_149709_2_ - 1, p_149709_3_ - 1, p_149709_4_, -1);
                boolean flag1 = func_150176_g(p_149709_1_, p_149709_2_ + 1, p_149709_3_, p_149709_4_, 3) || !p_149709_1_.getBlock(p_149709_2_ + 1, p_149709_3_, p_149709_4_).isNormalCube() && func_150176_g(p_149709_1_, p_149709_2_ + 1, p_149709_3_ - 1, p_149709_4_, -1);
                boolean flag2 = func_150176_g(p_149709_1_, p_149709_2_, p_149709_3_, p_149709_4_ - 1, 2) || !p_149709_1_.getBlock(p_149709_2_, p_149709_3_, p_149709_4_ - 1).isNormalCube() && func_150176_g(p_149709_1_, p_149709_2_, p_149709_3_ - 1, p_149709_4_ - 1, -1);
                boolean flag3 = func_150176_g(p_149709_1_, p_149709_2_, p_149709_3_, p_149709_4_ + 1, 0) || !p_149709_1_.getBlock(p_149709_2_, p_149709_3_, p_149709_4_ + 1).isNormalCube() && func_150176_g(p_149709_1_, p_149709_2_, p_149709_3_ - 1, p_149709_4_ + 1, -1);

                if (!p_149709_1_.getBlock(p_149709_2_, p_149709_3_ + 1, p_149709_4_).isNormalCube())
                {
                    if (p_149709_1_.getBlock(p_149709_2_ - 1, p_149709_3_, p_149709_4_).isNormalCube() && func_150176_g(p_149709_1_, p_149709_2_ - 1, p_149709_3_ + 1, p_149709_4_, -1))
                    {
                        flag = true;
                    }

                    if (p_149709_1_.getBlock(p_149709_2_ + 1, p_149709_3_, p_149709_4_).isNormalCube() && func_150176_g(p_149709_1_, p_149709_2_ + 1, p_149709_3_ + 1, p_149709_4_, -1))
                    {
                        flag1 = true;
                    }

                    if (p_149709_1_.getBlock(p_149709_2_, p_149709_3_, p_149709_4_ - 1).isNormalCube() && func_150176_g(p_149709_1_, p_149709_2_, p_149709_3_ + 1, p_149709_4_ - 1, -1))
                    {
                        flag2 = true;
                    }

                    if (p_149709_1_.getBlock(p_149709_2_, p_149709_3_, p_149709_4_ + 1).isNormalCube() && func_150176_g(p_149709_1_, p_149709_2_, p_149709_3_ + 1, p_149709_4_ + 1, -1))
                    {
                        flag3 = true;
                    }
                }

                return !flag2 && !flag1 && !flag && !flag3 && p_149709_5_ >= 2 && p_149709_5_ <= 5 ? i1 : (p_149709_5_ == 2 && flag2 && !flag && !flag1 ? i1 : (p_149709_5_ == 3 && flag3 && !flag && !flag1 ? i1 : (p_149709_5_ == 4 && flag && !flag2 && !flag3 ? i1 : (p_149709_5_ == 5 && flag1 && !flag2 && !flag3 ? i1 : 0))));
            }
        }
    }

    /**
     * Can this block provide power. Only wire currently seems to have this change based on its state.
     */
    public boolean canProvidePower()
    {
        return this.field_150181_a;
    }

    /**
     * Returns true if redstone wire can connect to the specified block. Params: World, X, Y, Z, side (not a normal
     * notch-side, this can be 0, 1, 2, 3 or -1)
     */
    public static boolean isPowerProviderOrWire(IBlockAccess p_150174_0_, int p_150174_1_, int p_150174_2_, int p_150174_3_, int p_150174_4_)
    {
        Block block = p_150174_0_.getBlock(p_150174_1_, p_150174_2_, p_150174_3_);

        if (block == Blocks.redstone_wire)
        {
            return true;
        }
        else if (!Blocks.unpowered_repeater.func_149907_e(block))
        {
            return block.canConnectRedstone(p_150174_0_, p_150174_1_, p_150174_2_, p_150174_3_, p_150174_4_);
        }
        else
        {
            int i1 = p_150174_0_.getBlockMetadata(p_150174_1_, p_150174_2_, p_150174_3_);
            return p_150174_4_ == (i1 & 3) || p_150174_4_ == Direction.rotateOpposite[i1 & 3];
        }
    }

    /**
     * A randomly called display update to be able to add particles or other items for display
     */
    @SideOnly(Side.CLIENT)
    public void randomDisplayTick(World p_149734_1_, int p_149734_2_, int p_149734_3_, int p_149734_4_, Random p_149734_5_)
    {
        int l = p_149734_1_.getBlockMetadata(p_149734_2_, p_149734_3_, p_149734_4_);

        if (l > 0)
        {
            double d0 = (double)p_149734_2_ + 0.5D + ((double)p_149734_5_.nextFloat() - 0.5D) * 0.2D;
            double d1 = (double)((float)p_149734_3_ + 0.0625F);
            double d2 = (double)p_149734_4_ + 0.5D + ((double)p_149734_5_.nextFloat() - 0.5D) * 0.2D;
            float f = (float)l / 15.0F;
            float f1 = f * 0.6F + 0.4F;

            if (l == 0)
            {
                f1 = 0.0F;
            }

            float f2 = f * f * 0.7F - 0.5F;
            float f3 = f * f * 0.6F - 0.7F;

            if (f2 < 0.0F)
            {
                f2 = 0.0F;
            }

            if (f3 < 0.0F)
            {
                f3 = 0.0F;
            }

            p_149734_1_.spawnParticle("reddust", d0, d1, d2, (double)f1, (double)f2, (double)f3);
        }
    }

    public static boolean func_150176_g(IBlockAccess p_150176_0_, int p_150176_1_, int p_150176_2_, int p_150176_3_, int p_150176_4_)
    {
        if (isPowerProviderOrWire(p_150176_0_, p_150176_1_, p_150176_2_, p_150176_3_, p_150176_4_))
        {
            return true;
        }
        else if (p_150176_0_.getBlock(p_150176_1_, p_150176_2_, p_150176_3_) == Blocks.powered_repeater)
        {
            int i1 = p_150176_0_.getBlockMetadata(p_150176_1_, p_150176_2_, p_150176_3_);
            return p_150176_4_ == (i1 & 3);
        }
        else
        {
            return false;
        }
    }

    /**
     * Gets an item for the block being called on. Args: world, x, y, z
     */
    @SideOnly(Side.CLIENT)
    public Item getItem(World p_149694_1_, int p_149694_2_, int p_149694_3_, int p_149694_4_)
    {
        return Items.redstone;
    }

    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister p_149651_1_)
    {
        this.field_150182_M = p_149651_1_.registerIcon(this.getTextureName() + "_" + "cross");
        this.field_150183_N = p_149651_1_.registerIcon(this.getTextureName() + "_" + "line");
        this.field_150184_O = p_149651_1_.registerIcon(this.getTextureName() + "_" + "cross_overlay");
        this.field_150180_P = p_149651_1_.registerIcon(this.getTextureName() + "_" + "line_overlay");
        this.blockIcon = this.field_150182_M;
    }

    @SideOnly(Side.CLIENT)
    public static IIcon getRedstoneWireIcon(String p_150173_0_)
    {
        return p_150173_0_.equals("cross") ? Blocks.redstone_wire.field_150182_M : (p_150173_0_.equals("line") ? Blocks.redstone_wire.field_150183_N : (p_150173_0_.equals("cross_overlay") ? Blocks.redstone_wire.field_150184_O : (p_150173_0_.equals("line_overlay") ? Blocks.redstone_wire.field_150180_P : null)));
    }
}

 

Only because I had to make a simular block for my mod

I'm always happy to help others!

 

Java is not my main programming language but I have alot experience in PHP/HTML/JS/CSS3/C#/SQL

Link to comment
Share on other sites

sorry hate to directly ask for code but can you show me what actaully needs to be write in replace of what, cause i fiddled around and stopped it working completly so reverted the code back. also it the block wont take redstone current from another conductor and wont take from redstone torches

 

CHANGE CIRCUITS

 

    public RedstoneConducter(int par1)

    {

        super(par1, Material.circuits);

        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F);

    }

 

TO ROCK

 

    public RedstoneConducter(int par1)

    {

        super(par1, Material.rock);

        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F);

    }

 

Seriously, Ctrl-F to find-in-file, just like every other application ever.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

i did change it to .rock the piston part worked but palcing on top or removing the under block doesnt.

 

package a.sounds;

 

import java.util.ArrayList;

import java.util.HashSet;

import java.util.Random;

import java.util.Set;

 

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.IconRegister;

import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.item.Item;

import net.minecraft.util.AxisAlignedBB;

import net.minecraft.util.Direction;

import net.minecraft.util.Icon;

import net.minecraft.world.ChunkPosition;

import net.minecraft.world.IBlockAccess;

import net.minecraft.world.World;

 

public class RedstoneConducter extends Block

{

    public RedstoneConducter(int par1, Material par2Material) {

super(par1, par2Material);

 

}

 

/**

    * When false, power transmission methods do not look at other redstone wires. Used internally during

    * updateCurrentStrength.

    */

    private boolean wiresProvidePower = true;

    private Set blocksNeedingUpdate = new HashSet();

    @SideOnly(Side.CLIENT)

    private Icon field_94413_c;

    @SideOnly(Side.CLIENT)

    private Icon field_94410_cO;

    @SideOnly(Side.CLIENT)

    private Icon field_94411_cP;

    @SideOnly(Side.CLIENT)

    private Icon field_94412_cQ;

 

    public RedstoneConducter(int par1)

    {

        super(par1, Material.rock);

        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F);

    }

 

    /**

    * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been

    * cleared to be reused)

    */

    public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)

    {

        return null;

    }

 

    /**

    * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two

    * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.

    */

    public boolean isOpaqueCube()

    {

        return false;

    }

 

    /**

    * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)

    */

    public boolean renderAsNormalBlock()

    {

        return false;

    }

 

    /**

    * The type of render function that is called for this block

    */

   

 

    @SideOnly(Side.CLIENT)

 

    /**

    * Returns a integer with hex for 0xrrggbb with this color multiplied against the blocks color. Note only called

    * when first determining what to render.

    */

    public int colorMultiplier(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)

    {

        return 8388608;

    }

 

    /**

    * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z

    */

    public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)

    {

        return par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4) || par1World.getBlockId(par2, par3 - 1, par4) == Block.glowStone.blockID;

    }

 

    /**

    * Sets the strength of the wire current (0-15) for this block based on neighboring blocks and propagates to

    * neighboring redstone wires

    */

    private void updateAndPropagateCurrentStrength(World par1World, int par2, int par3, int par4)

    {

        this.calculateCurrentChanges(par1World, par2, par3, par4, par2, par3, par4);

        ArrayList arraylist = new ArrayList(this.blocksNeedingUpdate);

        this.blocksNeedingUpdate.clear();

 

        for (int l = 0; l < arraylist.size(); ++l)

        {

            ChunkPosition chunkposition = (ChunkPosition)arraylist.get(l);

            par1World.notifyBlocksOfNeighborChange(chunkposition.x, chunkposition.y, chunkposition.z, this.blockID);

        }

    }

 

    private void calculateCurrentChanges(World par1World, int par2, int par3, int par4, int par5, int par6, int par7)

    {

        int k1 = par1World.getBlockMetadata(par2, par3, par4);

        byte b0 = 0;

        int l1 = this.getMaxCurrentStrength(par1World, par5, par6, par7, b0);

        this.wiresProvidePower = false;

        int i2 = par1World.getStrongestIndirectPower(par2, par3, par4);

        this.wiresProvidePower = true;

 

        if (i2 > 0 && i2 > l1 - 1)

        {

            l1 = i2;

        }

 

        int j2 = 0;

 

        for (int k2 = 0; k2 < 4; ++k2)

        {

            int l2 = par2;

            int i3 = par4;

 

            if (k2 == 0)

            {

                l2 = par2 - 1;

            }

 

            if (k2 == 1)

            {

                ++l2;

            }

 

            if (k2 == 2)

            {

                i3 = par4 - 1;

            }

 

            if (k2 == 3)

            {

                ++i3;

            }

 

            if (l2 != par5 || i3 != par7)

            {

                j2 = this.getMaxCurrentStrength(par1World, l2, par3, i3, j2);

            }

 

            if (par1World.isBlockNormalCube(l2, par3, i3) && !par1World.isBlockNormalCube(par2, par3 + 1, par4))

            {

                if ((l2 != par5 || i3 != par7) && par3 >= par6)

                {

                    j2 = this.getMaxCurrentStrength(par1World, l2, par3 + 1, i3, j2);

                }

            }

            else if (!par1World.isBlockNormalCube(l2, par3, i3) && (l2 != par5 || i3 != par7) && par3 <= par6)

            {

                j2 = this.getMaxCurrentStrength(par1World, l2, par3 - 1, i3, j2);

            }

        }

 

        if (j2 > l1)

        {

            l1 = j2 - 1;

        }

        else if (l1 > 0)

        {

            --l1;

        }

        else

        {

            l1 = 0;

        }

 

        if (i2 > l1 - 1)

        {

            l1 = i2;

        }

 

        if (k1 != l1)

        {

            par1World.setBlockMetadataWithNotify(par2, par3, par4, l1, 2);

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2 - 1, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2 + 1, par3, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3 - 1, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3 + 1, par4));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4 - 1));

            this.blocksNeedingUpdate.add(new ChunkPosition(par2, par3, par4 + 1));

        }

    }

 

    /**

    * Calls World.notifyBlocksOfNeighborChange() for all neighboring blocks, but only if the given block is a redstone

    * wire.

    */

    private void notifyWireNeighborsOfNeighborChange(World par1World, int par2, int par3, int par4)

    {

        if (par1World.getBlockId(par2, par3, par4) == this.blockID)

        {

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 - 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 + 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 - 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 + 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

        }

    }

 

    /**

    * Called whenever the block is added into the world. Args: world, x, y, z

    */

    public void onBlockAdded(World par1World, int par2, int par3, int par4)

    {

        super.onBlockAdded(par1World, par2, par3, par4);

 

        if (!par1World.isRemote)

        {

            this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 - 1);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 + 1);

 

            if (par1World.isBlockNormalCube(par2 - 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2 + 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 - 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 - 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 - 1);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 + 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 + 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 + 1);

            }

        }

    }

 

    /**

    * Called on server worlds only when the block has been replaced by a different block ID, or the same block with a

    * different metadata value, but before the new metadata value is set. Args: World, x, y, z, old block ID, old

    * metadata

    */

    public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)

    {

        super.breakBlock(par1World, par2, par3, par4, par5, par6);

 

        if (!par1World.isRemote)

        {

            par1World.notifyBlocksOfNeighborChange(par2, par3 + 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3 - 1, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 + 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2 - 1, par3, par4, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 + 1, this.blockID);

            par1World.notifyBlocksOfNeighborChange(par2, par3, par4 - 1, this.blockID);

            this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3, par4);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 - 1);

            this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3, par4 + 1);

 

            if (par1World.isBlockNormalCube(par2 - 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 - 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2 + 1, par3, par4))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 + 1, par4);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2 + 1, par3 - 1, par4);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 - 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 - 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 - 1);

            }

 

            if (par1World.isBlockNormalCube(par2, par3, par4 + 1))

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 + 1, par4 + 1);

            }

            else

            {

                this.notifyWireNeighborsOfNeighborChange(par1World, par2, par3 - 1, par4 + 1);

            }

        }

    }

 

    /**

    * Returns the current strength at the specified block if it is greater than the passed value, or the passed value

    * otherwise. Signature: (world, x, y, z, strength)

    */

    private int getMaxCurrentStrength(World par1World, int par2, int par3, int par4, int par5)

    {

        if (par1World.getBlockId(par2, par3, par4) != this.blockID)

        {

            return par5;

        }

        else

        {

            int i1 = par1World.getBlockMetadata(par2, par3, par4);

            return i1 > par5 ? i1 : par5;

        }

    }

 

    /**

    * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are

    * their own) Args: x, y, z, neighbor blockID

    */

    public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)

    {

        if (!par1World.isRemote)

        {

            boolean flag = this.canPlaceBlockAt(par1World, par2, par3, par4);

 

            if (flag)

            {

                this.updateAndPropagateCurrentStrength(par1World, par2, par3, par4);

            }

            else

            {

                this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0);

                par1World.setBlockToAir(par2, par3, par4);

            }

 

            super.onNeighborBlockChange(par1World, par2, par3, par4, par5);

        }

    }

 

   

 

    /**

    * Returns true if the block is emitting direct/strong redstone power on the specified side. Args: World, X, Y, Z,

    * side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block.

    */

    public int isProvidingStrongPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        return !this.wiresProvidePower ? 0 : this.isProvidingWeakPower(par1IBlockAccess, par2, par3, par4, par5);

    }

 

    /**

    * Returns true if the block is emitting indirect/weak redstone power on the specified side. If isBlockNormalCube

    * returns true, standard redstone propagation rules will apply instead and this will not be called. Args: World, X,

    * Y, Z, side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block.

    */

    public int isProvidingWeakPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)

    {

        if (!this.wiresProvidePower)

        {

            return 0;

        }

        else

        {

            int i1 = par1IBlockAccess.getBlockMetadata(par2, par3, par4);

 

            if (i1 == 0)

            {

                return 0;

            }

            else if (par5 == 1)

            {

                return i1;

            }

            else

            {

                boolean flag = isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3, par4, 1) || !par1IBlockAccess.isBlockNormalCube(par2 - 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3 - 1, par4, -1);

                boolean flag1 = isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3, par4, 3) || !par1IBlockAccess.isBlockNormalCube(par2 + 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3 - 1, par4, -1);

                boolean flag2 = isPoweredOrRepeater(par1IBlockAccess, par2, par3, par4 - 1, 2) || !par1IBlockAccess.isBlockNormalCube(par2, par3, par4 - 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 - 1, par4 - 1, -1);

                boolean flag3 = isPoweredOrRepeater(par1IBlockAccess, par2, par3, par4 + 1, 0) || !par1IBlockAccess.isBlockNormalCube(par2, par3, par4 + 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 - 1, par4 + 1, -1);

 

                if (!par1IBlockAccess.isBlockNormalCube(par2, par3 + 1, par4))

                {

                    if (par1IBlockAccess.isBlockNormalCube(par2 - 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 - 1, par3 + 1, par4, -1))

                    {

                        flag = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2 + 1, par3, par4) && isPoweredOrRepeater(par1IBlockAccess, par2 + 1, par3 + 1, par4, -1))

                    {

                        flag1 = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2, par3, par4 - 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 + 1, par4 - 1, -1))

                    {

                        flag2 = true;

                    }

 

                    if (par1IBlockAccess.isBlockNormalCube(par2, par3, par4 + 1) && isPoweredOrRepeater(par1IBlockAccess, par2, par3 + 1, par4 + 1, -1))

                    {

                        flag3 = true;

                    }

                }

 

                return !flag2 && !flag1 && !flag && !flag3 && par5 >= 2 && par5 <= 5 ? i1 : (par5 == 2 && flag2 && !flag && !flag1 ? i1 : (par5 == 3 && flag3 && !flag && !flag1 ? i1 : (par5 == 4 && flag && !flag2 && !flag3 ? i1 : (par5 == 5 && flag1 && !flag2 && !flag3 ? i1 : 0))));

            }

        }

    }

 

    /**

    * Can this block provide power. Only wire currently seems to have this change based on its state.

    */

    public boolean canProvidePower()

    {

        return this.wiresProvidePower;

    }

 

    /**

    * Returns true if redstone wire can connect to the specified block. Params: World, X, Y, Z, side (not a normal

    * notch-side, this can be 0, 1, 2, 3 or -1)

    */

    public static boolean isPowerProviderOrWire(IBlockAccess par0IBlockAccess, int par1, int par2, int par3, int par4)

    {

        int i1 = par0IBlockAccess.getBlockId(par1, par2, par3);

 

        if (i1 == Block.redstoneWire.blockID)

        {

            return true;

        }

        else if (i1 == 0)

        {

            return false;

        }

        else if (!Block.redstoneRepeaterIdle.func_94487_f(i1))

        {

            return (Block.blocksList[i1] != null && Block.blocksList[i1].canConnectRedstone(par0IBlockAccess, par1, par2, par3, par4));

        }

        else

        {

            int j1 = par0IBlockAccess.getBlockMetadata(par1, par2, par3);

            return par4 == (j1 & 3) || par4 == Direction.rotateOpposite[j1 & 3];

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * A randomly called display update to be able to add particles or other items for display

    */

    public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)

    {

        int l = par1World.getBlockMetadata(par2, par3, par4);

 

        if (l > 0)

        {

            double d0 = (double)par2 + 0.5D + ((double)par5Random.nextFloat() - 0.5D) * 0.2D;

            double d1 = (double)((float)par3 + 0.0625F);

            double d2 = (double)par4 + 0.5D + ((double)par5Random.nextFloat() - 0.5D) * 0.2D;

            float f = (float)l / 15.0F;

            float f1 = f * 0.6F + 0.4F;

 

            if (l == 0)

            {

                f1 = 0.0F;

            }

 

            float f2 = f * f * 0.7F - 0.5F;

            float f3 = f * f * 0.6F - 0.7F;

 

            if (f2 < 0.0F)

            {

                f2 = 0.0F;

            }

 

            if (f3 < 0.0F)

            {

                f3 = 0.0F;

            }

 

            par1World.spawnParticle("reddust", d0, d1, d2, (double)f1, (double)f2, (double)f3);

        }

    }

 

    /**

    * Returns true if the block coordinate passed can provide power, or is a redstone wire, or if its a repeater that

    * is powered.

    */

    public static boolean isPoweredOrRepeater(IBlockAccess par0IBlockAccess, int par1, int par2, int par3, int par4)

    {

        if (isPowerProviderOrWire(par0IBlockAccess, par1, par2, par3, par4))

        {

            return true;

        }

        else

        {

            int i1 = par0IBlockAccess.getBlockId(par1, par2, par3);

 

            if (i1 == Block.redstoneRepeaterActive.blockID)

            {

                int j1 = par0IBlockAccess.getBlockMetadata(par1, par2, par3);

                return par4 == (j1 & 3);

            }

            else

            {

                return false;

            }

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)

    */

    public int idPicked(World par1World, int par2, int par3, int par4)

    {

        return Item.redstone.itemID;

    }

 

 

 

    /**

    * When this method is called, your block should register all the icons it needs with the given IconRegister. This

    * is the only chance you get to register icons.

    */

    @SideOnly(Side.CLIENT)

public void registerIcons(IconRegister par1IconRegister){

this.blockIcon = par1IconRegister.registerIcon("oomod:RedstoneConducter");

}

 

    }

 

 

 

Link to comment
Share on other sites

Are you actually making any of the changes I suggest?

 

Fix canPlaceBlockAt to return true.

 

    public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)

    {

        return par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4) || par1World.getBlockId(par2, par3 - 1, par4) == Block.glowStone.blockID;

    }

 

IS NOT ALWAYS RETURNING TRUE.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

multiple outputs cancel each other, so if i had ----[]---- it would work but if i did -----[]-----

                                                                                                                                    | 

the two which arent from the power source turn off

 

secondly can i make the redstone current transmit vertically?

 

third doesnt get a current when conencted to a repeater or torch?

 

fourth wont give current to a repeater

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.