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][Unsolved] Making my block only breakable with my pickaxe only

Featured Replies

Posted

Hi, My blocks are instantly breaking with any tool and i want them to only break with my pick.

 

I have this in my block class:

this.setHarvestLevel("pickaxe", 4);

 

And this is the material my pick is "made" from:

public static Item.ToolMaterial DungeonMaterial = EnumHelper.addToolMaterial("DungeonMaterial", 4, 3122, 14.0F, 3.0F, 17);

 

With a diamond pick the blocks break instantly but don't drop the item. With my pick they break instantly and the blocks do drop.

Help me make my block only break with my pickaxe and drop!

 

Thanks

    - Tixal

  • Author

Nobody?

 

Well is this even possible?

 

I can post more code if needed.

 

Thanks

    - Tixal

I'm not sure what you mean exactly.

 

Do you want your block to be completely unbreakable (like bedrock) unless someone uses your pickaxe,  in which case it breaks normally?

 

If so you can just not worry about setting the harvest level of the block, and use the BlockEvent.BreakEvent, check if the block that's being harvested is your block, check if the item that is being used is your pickaxe, and if not cancel the event. Something like

 

@SubscribeEvent
public void onBlockBroken(BlockEvent.BreakEvent event)
{
    if(event.block instanceof YourBlockType && !(event.getPlayer().inventory.getCurrentItem().getItem() instanceof YourPickaxe)
    {
        event.setCancelled(true);
    }
}

 

EDIT: I forgot to mention, you'd also want to check that event.getPlayer().getCurrentItem() != null before calling geItem() because I believe if the player is using an empty hand getItem() on null throws a NPE.

BEFORE ASKING FOR HELP READ THE EAQ!

 

I'll help if I can. Apologies if I do something obviously stupid. :D

 

If you don't know basic Java yet, go and follow these tutorials.

  • Author
Do you want your block to be completely unbreakable (like bedrock) unless someone uses your pickaxe,  in which case it breaks normally?

 

Yes that is exactly what I want.

 

I will go and try your solution now

 

Thanks

    - Tixal

 

  • Author

Hi,

 

I have no idea how in use that code snip-it :( im a bit of a newb,

 

I changed it so it will work with my blocks and tool and has no errors but it does nothing, Im guessing I did it wrong

I added the code to my main class, I have never used events properly before so im not sure how to use it.

 

My full project can be found here:https://github.com/Tixal/Mythical-Items  if that helps you help me

 

Thanks

    - Tixal

Create a class for your event handling, then register that class using

MinecraftForge.EVENT_BUS.register(InstanceOfYourEventHandlerClass);

 

In that class create a method like the one I posted earlier.

BEFORE ASKING FOR HELP READ THE EAQ!

 

I'll help if I can. Apologies if I do something obviously stupid. :D

 

If you don't know basic Java yet, go and follow these tutorials.

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.