Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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

  • Author

I hate to double post as it seems slightly selfish, but I would still appreciate at least a few links to the right place.

Take a look at how the furnace works. That uses meta data to determine which sides have what textures and when placed it uses the players facing direction to set the metadata. 

I am the author of Draconic Evolution

  • Author

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?

  • Author

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());
        }
    }

Try removing that altogether you really only need to worry about onBlockPlacedBy.

 

Also a good way to check that the metadata is actuallly being set is to put a Sysout in onBlockActivated that prints out the metadata.

I am the author of Draconic Evolution

  • Author

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?

  • Author

Could the problem be that I don't have a getIcon method? And what would I need to include in the method to complete it for a tile entity with a custom model?

 

Thanks for all your help by the way, much appreciated

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.