Jump to content

meta data block orientation[unsolved]


TheGrovesyProject101

Recommended Posts

i want to know how how to change the orientation of my meta data blocks by on where i stand when placing them does anyone know how to do it here is my block file

package TheCivilizationMod;

import java.util.List;

import net.minecraft.src.Block;
import net.minecraft.src.CreativeTabs;
import net.minecraft.src.EntityLiving;
import net.minecraft.src.ItemStack;
import net.minecraft.src.Material;
import net.minecraft.src.MathHelper;
import net.minecraft.src.World;
import net.minecraftforge.common.ForgeDirection;
import cpw.mods.fml.common.Side;
import cpw.mods.fml.common.asm.SideOnly;

public class glass extends Block{
public glass(int id, int texture){
	super(id, texture, Material.rock);
	this.setCreativeTab(CreativeTabs.tabBlock);
	this.setRequiresSelfNotify();


}
public String getTextureFile(){
	return "/Mod/MultiBlocks.png";
}

public int getBlockTextureFromSideAndMetadata(int side, int meta) {
        switch(meta) {
                case 0:
                        switch(side) {
                        case 0: return 22;
                        
                                case 1: return 22;
                                case 2: return 22;
                                case 3: return 0;
                                default: return 22;
                         }
                case 1:
                	switch(side) {
                    case 0: return 23;
                    
                            case 1: return 23;
                            case 2: return 23;
                            case 3: return 0;
                            default: return 23;
                        	 
                        
              

        }
	return side;
}

    
@Override
public int damageDropped(int meta){
	return meta;
}

@SideOnly(Side.CLIENT)
public void getSubBlocks(int par1, CreativeTabs tab, List list){
	for(int NumOfMets=0; NumOfMets<2; NumOfMets++){
		list.add(new ItemStack(par1, 1, NumOfMets));

	}
}
}

My youtube channel for forge tutorials: http://www.youtube.com/user/TheGrovesyProject101?feature=mhee

 

if i helped please press thank you

Link to comment
Share on other sites

You need a TileEntity to do that.

 

Basically you have to make a simple variable like "orientation" where to store the orientation. After that you should use a ISimpleBlockRender too to change the actual block orientation depending on TileEntity data.

 

I don't know if you can find any readytouse code, you may want to check out UE wich is public in github.

Link to comment
Share on other sites

You need a TileEntity to do that.

 

Basically you have to make a simple variable like "orientation" where to store the orientation. After that you should use a ISimpleBlockRender too to change the actual block orientation depending on TileEntity data.

 

I don't know if you can find any readytouse code, you may want to check out UE wich is public in github.

no sorry cant find anything that works in there

My youtube channel for forge tutorials: http://www.youtube.com/user/TheGrovesyProject101?feature=mhee

 

if i helped please press thank you

Link to comment
Share on other sites

You don't need a TileEntity. In fact, that's more downsides than anything else...

 

Like DarkGuardsman said, you get the players rotation. But that's a float, and you can't use that on MetaData.

 

I have a block that can have horizontal rotation, which depends pretty much on the player's Yaw angle.

So I have this function on my Helper class:

 

public static int yaw2dir(float yaw){
	int dir = (MathHelper.floor_double((double)(yaw * 4.0F / 360.0F) + 0.5D) & 3)+3;
	if(dir > 4) dir -= 4;
	switch(dir){
		case 1: return dirZPos;
		case 2: return dirXNeg;
		case 3: return dirZNeg;
		case 4: return dirXPos;
		default: return 0;
	}
}

 

When the block is placed, I call that function with player.rotationYaw, and it returns the block's orientation (facing the player). I then proceed to set that value as the block's Metadata.

 

It is later used by my block's renderer to decide what texture to use on each face.

Did I help? Hitting 'Thank You' would be appreciated.

 

Soon, the lost city will rise from the bottom of the ocean, and spread it's technology across Minecraft.

Link to comment
Share on other sites

I'm not sure... that why I have them on constants instead of directly using the value :P

They should be pretty easy to figure out though, at least they were to me...

Did I help? Hitting 'Thank You' would be appreciated.

 

Soon, the lost city will rise from the bottom of the ocean, and spread it's technology across Minecraft.

Link to comment
Share on other sites

If you're still having problems with this, perhaps try looking at the vanilla log block code, from what I can tell, you're trying to do exactly the same thing as the vanilla log does

no the way that does it is by a single textured block with multiple side (only 1 texture) i have multiple blocks with the metadata each with a different texture.

My youtube channel for forge tutorials: http://www.youtube.com/user/TheGrovesyProject101?feature=mhee

 

if i helped please press thank you

Link to comment
Share on other sites

look at the vanilla furnace code, that changes the meta data of the block dependent on where the player is facing(which i think is what you are trying to achieve :) )

i have but that does it through textures but i have to do mine without having to chage the texture because its a meta data block that changes oreintation each block has a different texture

My youtube channel for forge tutorials: http://www.youtube.com/user/TheGrovesyProject101?feature=mhee

 

if i helped please press thank you

Link to comment
Share on other sites

ah, i see what you mean. I tried to do that my self, but i found it is far easier to use several meta-data blocks as the orientation. However, i tried creating a tile entity and using nbt tagging to save the texture for each block. I never got it to work, but im quite new to modding so you may have a better chance :P

Link to comment
Share on other sites

i don't think it is as complex as it seems, so i wrote out a little example below. This probably wont work straight off, but it may give you something to start on :).

 

try declaring an int for the orientation, then 6 arrays, one for each block side.

int orientation;
int side1[];
int side2[];
// etc.

 

then write out the arrays so that array[orientation] = the texture icon you want.

 

int side1[] = {1,1,1,0};
int side2[] = {1,1,0,1};
//etc.

 

then use getBlockTextureFromSide

public int getBlockTextureFromSide(int side){
switch(side){
case 1:
return side1[orientation];
break;
case 2:
return side2[orientation];
break;
//etc.
}
}

 

then use this tutorial to help you save the variable orientation so that it is not reset when the client is closed.

 

http://www.minecraftforge.net/wiki/How_to_use_NBT_Tag_Compound

 

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.