Jump to content

[1.7.10] Multiblock Structure & Directional Blocks


Whyneb360

Recommended Posts

Okay, so I have two questions, and the first might get a little complicated - I want to make a multiblock structure similar to the research table in Thaumcraft 4 (Place two blocks on the ground, and right click with a certain item to turn it into a different tile entity all together). Specifically, I want to place two tables on the ground, and then two flat panels above it against the wall, right click it with an item and it turns into a workbench of sorts.

 

My questions are how would I make this multiblock structure (just by it self - not including the custom crafting bench as I can probably find a tutorial on that) and how would I make a block face the way I want it to: e.g. 16x16x1 pixel panel against the wall, but which way it faces depends on the way you are facing when you place it.

 

I recognise that the second problem is most likely easier to solve than the first, but any help on either would be greatly appreciated.

 

P.S. Also, if you know of any tutorials of either text or video and would help me, please provide a link.

 

Thanks,

 

-Whyneb360

Link to comment
Share on other sites

I have this code now for the rotation:

 

public void onBlockAdded(World world, int x, int y, int z) {
	super.onBlockAdded(world, x, y, z);
	this.setDefaultDirection(world, x, y, z);
}

private void setDefaultDirection(World world, int x, int y, int z) {
	if(!world.isRemote) {
		Block b1 = world.getBlock(x, y, z - 1);
		Block b2 = world.getBlock(x, y, z + 1);
		Block b3 = world.getBlock(x - 1, y, z);
		Block b4 = world.getBlock(x + 1, y, z);

		byte b0 = 3;

		if(b1.func_149730_j() && !b2.func_149730_j())  {
			b0 = 3;
		}

		if(b2.func_149730_j() && !b1.func_149730_j())  {
			b0 = 2;
		}

		if(b3.func_149730_j() && !b4.func_149730_j())  {
			b0 = 5;
		}

		if(b4.func_149730_j() && !b3.func_149730_j())  {
			b0 = 4;
		}

		world.setBlockMetadataWithNotify(x, y, z, b0, 2);
	}
}

public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityplayer, ItemStack itemstack) {
	int l = MathHelper.floor_double((double)(entityplayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

	if(l == 0) {
		world.setBlockMetadataWithNotify(x, y, z, 2, 2);
	}

	if(l == 1) {
		world.setBlockMetadataWithNotify(x, y, z, 5, 2);
	}

	if(l == 2) {
		world.setBlockMetadataWithNotify(x, y, z, 3, 2);
	}

	if(l == 3) {
		world.setBlockMetadataWithNotify(x, y, z, 4, 2);
	}	
}

 

...but it still just faces in one direction. Any ideas why?

Link to comment
Share on other sites

Thanks,

 

What should I change it to?

 

EDIT: I looked at the vanilla furnace code, and it it written as pretty much the same. Does this mean it has to do with the block being a tile entity?:

 

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_);
        this.func_149930_e(p_149726_1_, p_149726_2_, p_149726_3_, p_149726_4_);
    }

    private void func_149930_e(World p_149930_1_, int p_149930_2_, int p_149930_3_, int p_149930_4_)
    {
        if (!p_149930_1_.isRemote)
        {
            Block block = p_149930_1_.getBlock(p_149930_2_, p_149930_3_, p_149930_4_ - 1);
            Block block1 = p_149930_1_.getBlock(p_149930_2_, p_149930_3_, p_149930_4_ + 1);
            Block block2 = p_149930_1_.getBlock(p_149930_2_ - 1, p_149930_3_, p_149930_4_);
            Block block3 = p_149930_1_.getBlock(p_149930_2_ + 1, p_149930_3_, p_149930_4_);
            byte b0 = 3;

            if (block.func_149730_j() && !block1.func_149730_j())
            {
                b0 = 3;
            }

            if (block1.func_149730_j() && !block.func_149730_j())
            {
                b0 = 2;
            }

            if (block2.func_149730_j() && !block3.func_149730_j())
            {
                b0 = 5;
            }

            if (block3.func_149730_j() && !block2.func_149730_j())
            {
                b0 = 4;
            }

            p_149930_1_.setBlockMetadataWithNotify(p_149930_2_, p_149930_3_, p_149930_4_, b0, 2);
        }
    }

public void onBlockPlacedBy(World p_149689_1_, int p_149689_2_, int p_149689_3_, int p_149689_4_, EntityLivingBase p_149689_5_, ItemStack p_149689_6_)
    {
        int l = MathHelper.floor_double((double)(p_149689_5_.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;

        if (l == 0)
        {
            p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 2, 2);
        }

        if (l == 1)
        {
            p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 5, 2);
        }

        if (l == 2)
        {
            p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 3, 2);
        }

        if (l == 3)
        {
            p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, 4, 2);
        }

        if (p_149689_6_.hasDisplayName())
        {
            ((TileEntityFurnace)p_149689_1_.getTileEntity(p_149689_2_, p_149689_3_, p_149689_4_)).func_145951_a(p_149689_6_.getDisplayName());
        }
    }

Link to comment
Share on other sites

So I got rid of the setDefaultDirection method, and just left the onBlockAdded and onBlockPlacedBy (with the System println) and saw that the metadata was changing, but the block still only faced one way. which bit of code am I missing to make the block actually turn?

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.



×
×
  • Create New...

Important Information

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