Jump to content

[1.7.10] Getting the 'full' localized name of the 'block'.


Nique84

Recommended Posts

I've made code that uses raytrace to get the actual block the user is looking at. For just blocks it's working fine but for subblocks (like different types of wood) its not working. It seems there is no function for getting the localized name for the vanilla subblocks. I have thought about

 

Item item = Item.getItemFromBlock(anyblock)

 

But then the getUnlocalizedName() name requires me to add a stack. But i do not want to create a new stack because when i create a new stack, the damage must be set manually. And thats just not what i want. I want to retrieve the current damage of the current item so i can get its unlocalized name. How do i retrieve the damage of an item? Or even better, isn't there a better way of retrieving the sub blocks 'full' name? (not just Wood, but Oak Wood) I've tried to take a look in the gui (because of the tool tips) but appearantly the File Search in Eclipse doesn't work for Referenced Libraries. I can't find anything.. even if i set to search delegate.

Link to comment
Share on other sites

Need more code.  How are you setting

anyblock

?

In order to get the "full" name you need the block's metadata.  The world has that information, but it entirely depends on what variables you have access to, which requires seeing the whole function.

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 created a EntityPlayer class that is registered to Forge's event bus in the Mainclass. This is just temporary code to get the current block. I will change that in the future.

 

public class EntityPlayer
{
private Block lastBlock;

@SubscribeEvent
public void onUpdate(LivingUpdateEvent event)
{
	if (event.entity instanceof net.minecraft.entity.player.EntityPlayer)
	{
		MovingObjectPosition mop = Minecraft.getMinecraft().renderViewEntity.rayTrace(5, 1.0F);
		if(mop != null)
		{
		    int blockHitSide = mop.sideHit;
		    Block block = event.entityLiving.worldObj.getBlock(mop.blockX, mop.blockY, mop.blockZ);
		    
		    if (lastBlock != block)
		    {	    	
		    	Main.instance.log.info("--> Player looks at: " + block.getLocalizedName());
		    	lastBlock = block;
		    }
		}
	}
}
}

 

Edit:

I added

int metaData = world.getBlockMetadata(mop.blockX, mop.blockY, mop.blockZ);

to the function and now i get the damage value.

 

Now i need to construct the name of the block. Which is (in my opinion) kinda weird. Is there no getLocalizedName() for vanilla subblocks? I tried to find such function but i'm unable to search in the forge reference lib. Even when i'm searching on "block.log.oak.name". Eclipse is just returning "no results" while i know it is in the lang file.

Link to comment
Share on other sites

StatCollector.translateToLocal(block.getUnlocalizedName())

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 ended up doing it like this. It looks ugly to me but it works.

 

public class EntityPlayer
{
private Block lastBlock;

@SubscribeEvent
public void onUpdate(LivingUpdateEvent event)
{
	if (event.entity instanceof net.minecraft.entity.player.EntityPlayer)
	{
		MovingObjectPosition mop = Minecraft.getMinecraft().renderViewEntity.rayTrace(5, 1.0F);
		if(mop != null)
		{
		    World world = event.entityLiving.worldObj;
		    
		    if (!world.isAirBlock(mop.blockX, mop.blockY, mop.blockZ))
		    {
		    	Block block = world.getBlock(mop.blockX, mop.blockY, mop.blockZ);
			    
			    if (lastBlock != block)
			    {	   
			    	int metaData = world.getBlockMetadata(mop.blockX, mop.blockY, mop.blockZ);
				ItemBlock itemBlock = (ItemBlock) ItemBlock.getItemFromBlock(block);
			    	String blockName = StatCollector.translateToLocal(itemBlock.getUnlocalizedName(new ItemStack(block, 1, metaData)) + ".name");
			    	
			    	Main.instance.log.info("--> Player looks at: " + blockName);
			    	lastBlock = block;	
			    }
		    }   			    
		}
	}
}
}

Link to comment
Share on other sites

Well i ended up doing it this way. Thanks for the help!

 

public class PlayerEventHandler
{
private Block	lastBlock;

@SubscribeEvent
public void onPlayerTick(PlayerTickEvent event)
{
	if (event.side == Side.CLIENT)
	{
		EntityPlayer player = event.player;
		World world = player.worldObj;

		MovingObjectPosition mop = player.rayTrace(5, 1.0F);

		if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && !world.isAirBlock(mop.blockX, mop.blockY, mop.blockZ))
		{
			Block block = world.getBlock(mop.blockX, mop.blockY, mop.blockZ);

			if (lastBlock != block)
			{
				int metaData = world.getBlockMetadata(mop.blockX, mop.blockY, mop.blockZ);
				Item item = Item.getItemFromBlock(block);
				String unlocalizedName = item.getUnlocalizedName(new ItemStack(block, 1, metaData));
				String blockName = StatCollector.translateToLocal(unlocalizedName + ".name");
				Main.instance.log.info("--> Player looks at: " + blockName);
				lastBlock = block;
			}
		}
	}
}
}

 

15d2e7b.png

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.