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.

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

Featured Replies

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?

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!

  • Author

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.

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
  • Author

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.

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
  • Author

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

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.