Jump to content

[1.7.10][SOLVED] Stone Bricks and Quartz don't have efficient tools


Recommended Posts

Posted

I have stumbled upon the fact that Stone Bricks and Quartz don't have a tool that is efficient against them. This confuses me, since it seems vanilla Pickaxes are efficient against them, however my custom pickaxe is not. My pickaxe works perfectly on all blocks excluding Stone Bricks, Quartz, Redstone Ore (For a different reason), and Obsidian (for the same reason as redstone). Is there something I'm missing that the Vanilla Pickaxes are doing?

Posted

It is probably because you are not setting the tool level and other info, that lets you mine block that require a higher level pickaxe, such as obsidian, diamond, etc.

Don't be afraid to ask question when modding, there are no stupid question! Unless you don't know java then all your questions are stupid!

Posted

Nope, that's not it, I have the hardness level set equivalent to that of an iron pickaxe. But it is not behaving the same way, which is what is confusing me. I also had it print out the harvestTool to the console and StoneBrick and Quartz print out null. Which is obviously not true since iron pickaxes aren't slow against StoneBrick and Quartz.

Posted

What is your harvest level?

 

Show me code for you setting the harvest level.

-Mitchellbrine

 

Minecraft can do ANYTHING, it's coded in Java and you got the full power of Java behind you when you code. So nothing is impossible.

It may be freaking fucking hard though, but still possible ;)

 

If you create a topic on Modder Support, live by this motto:

I don't want your charity, I want your information
Posted

So I didn't use the built in tool material mechanic to make my custom pickaxe, and I wanted it to be upgradable and what not. So I use NBT data to store an int array in the itemstack:

    			int[] material = {2, 6, 4}; //Harvest Level, efficiencyOnProperMaterial, damageVsEntities
    			par1ItemStack.stackTagCompound.setIntArray("pickaxe", material);

 

Then I overrode the default getHarvestLevel method inherited from the Item class to reflect this:

 

    @Override
    public int getHarvestLevel(ItemStack stack, String toolClass)
    {
    	String batonClass = stack.stackTagCompound.getString("Class");
    	if (batonClass.equals("pickaxe"))
    	{
        	int[] material = stack.stackTagCompound.getIntArray(batonClass);
        	return material[0];
    	}
    	return -1;
    }

 

I have also overriden the following two methods as well:

    @Override
    public Set<String> getToolClasses(ItemStack stack)
    {
    	Set<String> set = new HashSet<>();
    	if (stack.stackTagCompound!= null)
    	{
    		set.add(stack.stackTagCompound.getString("Class"));
    	}
        return set;
    }

@Override
    public float getDigSpeed(ItemStack stack, Block block, int meta)
    {
    	System.out.println(block.getHarvestTool(meta));
        if (ForgeHooks.isToolEffective(stack, block, meta))
        {
        	String itemClass = stack.stackTagCompound.getString("Class");
        	int[] material = stack.stackTagCompound.getIntArray(itemClass);
            return (float)material[1];
        }
        return super.getDigSpeed(stack, block, meta);
    }

 

My pickaxe works just like an iron pickaxe on all blocks except the ones I listed.

Posted

Your harvest level -1. The string "Class" is null. That or the stack is null. That might be the issue with the pickaxe harvest level.

 

(That or I'm misunderstanding the issue.)

-Mitchellbrine

 

Minecraft can do ANYTHING, it's coded in Java and you got the full power of Java behind you when you code. So nothing is impossible.

It may be freaking fucking hard though, but still possible ;)

 

If you create a topic on Modder Support, live by this motto:

I don't want your charity, I want your information
Posted

Well, after some investigating I found this code in the default block class:

    public boolean isToolEffective(String type, int metadata)
    {
        if ("pickaxe".equals(type) && (this == Blocks.redstone_ore || this == Blocks.lit_redstone_ore || this == Blocks.obsidian))
            return false;
        if (harvestTool[metadata] == null) return false;
        return harvestTool[metadata].equals(type);
    }

Which sorta explains why the redstone (which I can still mine properly) and obsidian are taking so long, though an iron pickaxe, even though it doesn't harvest obsidian, still doesn't take nearly as long to mine. Which means the iron pickaxe is getting around that somehow.

 

I placed the following code into my pickaxe code:[s/]

    	System.out.println(block.getHarvestTool(meta));

I when mining Stone Bricks or Quartz it prints out null, which doesn't make any sense, since an iron pickaxe works fine on both. So I've concluded there must be something that I am missing that I can't seem to figure out.

 

After some looking at the Tinker's Construct code and some javadoc reading I figured out how to get everything working! Check out the Baton.java source code for my mod here to check out how I solved my problem.

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.