Jump to content

Custom Log Stripping


urabaros

Recommended Posts

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;
    }
}

 

 

Link to comment
Share on other sites

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

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.