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.

Featured Replies

Posted

Hi!

I'm trying to make a custom Stick that would strip special custom blocks.

I know how to add blocks to BLOCK_STRIPPING_MAP, but my goal is to strip my custom blocks only with my custom Stick, but not with vanilla Axes.

I've tried to create StickItem extends ToolItem and copy everything from AxeItem, then change BLOCK_STRIPPING_MAP, but it doesn't help. Moreover, it seems that this stripping depends on ToolType in onItemUse function... so I don't know what to do.

Do anyone have any ideas?

Quote

 

My code: 

public class StickItem extends ToolItem
{
        private static final Set<Material> EFFECTIVE_ON_MATERIALS_1 = Sets.newHashSet(Material.WOOD, Material.NETHER_WOOD, Material.PLANTS, Material.TALL_PLANTS, Material.BAMBOO, Material.GOURD);
        private static final Set<Block> EFFECTIVE_ON_BLOCKS_1 = Sets.newHashSet(Blocks.LADDER, Blocks.SCAFFOLDING, Blocks.OAK_BUTTON, Blocks.SPRUCE_BUTTON, Blocks.BIRCH_BUTTON, Blocks.JUNGLE_BUTTON, Blocks.DARK_OAK_BUTTON, Blocks.ACACIA_BUTTON, Blocks.CRIMSON_BUTTON, Blocks.WARPED_BUTTON);
        protected static final Map<Block, Block> BLOCK_STRIPPING_MAP_1 = (new Builder<Block, Block>()).put(BlockInit.CUSTOM_BLOCK.get(), BlockInit.CUSTOM_BLOCK_STRIPPED.get()).build();
     

        public StickItem(IItemTier tier, float attackDamageIn, float attackSpeedIn, Item.Properties builder) {
            super(attackDamageIn, attackSpeedIn, tier, EFFECTIVE_ON_BLOCKS_1, builder.addToolType(net.minecraftforge.common.ToolType.PICKAXE, tier.getHarvestLevel()));
         }
 
    public float getDestroySpeed(ItemStack stack, BlockState state) {
       Material material = state.getMaterial();
       return EFFECTIVE_ON_MATERIALS_1.contains(material) ? this.efficiency : super.getDestroySpeed(stack, state);
    }

    /**
     * Called when this item is used when targetting a Block
     */
    @Override
    public ActionResultType onItemUse(ItemUseContext context) {
       World world = context.getWorld();
       BlockPos blockpos = context.getPos();
       BlockState blockstate = world.getBlockState(blockpos);
       BlockState block = blockstate.getToolModifiedState(world, blockpos, context.getPlayer(), context.getItem(), net.minecraftforge.common.ToolType.AXE);
       if (block != null) {
          PlayerEntity playerentity = context.getPlayer();
          world.playSound(playerentity, blockpos, SoundEvents.ITEM_AXE_STRIP, SoundCategory.BLOCKS, 1.0F, 1.0F);
          if (!world.isRemote) {
             world.setBlockState(blockpos, block, 11);
             if (playerentity != null) {
                context.getItem().damageItem(1, playerentity, (p_220040_1_) -> {
                   p_220040_1_.sendBreakAnimation(context.getHand());
                });
             }
          }

          return ActionResultType.func_233537_a_(world.isRemote);
       } else {
          return ActionResultType.PASS;
       }
    }

    
    public static BlockState getAxeStrippingState(BlockState originalState) {
       Block block = BLOCK_STRIPPING_MAP_1.get(originalState.getBlock());
       return block != null ? block.getDefaultState().with(RotatedPillarBlock.AXIS, originalState.get(RotatedPillarBlock.AXIS)) : null;
    }
}

 

 

Learn basic java, and don't copy and paste code you don't understand.

in the onItemUse method, you can get the block the item has been used on through the ItemUseContext. and you can change the block and/or blockstate in a position with World#setBlockState

also, when you're posting code in the forums, use the proper code tool, not the quote tool, that way your code won't be a non-monospaced, non-syntax-highlighted hell to read

oh, and also also, help with coding should go under the Modder Support forum, not ForgeGradle (Moderator: Thread Moved)

Edited by DaemonUmbra

  • Author

Thank you! Sorry, I really know java poorly, but I'm definitely going to learn it! Thank you once more!

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.