Jump to content

Recommended Posts

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

 

Expand  

 

Posted (edited)

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

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Alright, here is the log file https://mclo.gs/5eCwafV
    • Please read the FAQ (https://forums.minecraftforge.net/topic/125488-rules-and-frequently-asked-questions-faq/) and post log files as described there, using a site such as https://mclo.gs/ and post the link here.  
    • I tried updating the mods in my modpack which caused incompatibilities so i have tried to revert them back to their older versions i was using before. In the logs it doesnt show me any clear incompatibilities except for tfmg & entity texture features, but when i try to remove those it still doesn't work. I have tried removing the forge-client.toml file which was a suggestion i found on  a few other posts. This is the log file i get. [inline log removed] Any help would be appreciated. Thanks in advance
    • I don't use KubeJS, never even heard of it. But after doing what "Ugdhar" suggested earlier in this post with the "config/Mekanism/generator-storage.toml", I tried going into an individual save's serverconfig folder, and just deleting everything except the parcool folder (I have that mod installed.) Then, a bit of loading and temporary freezing later, seems to have worked. Even when quitting to menu and loading back in, or also when quitting to menu, exiting to desktop, and re-launching MC, choose a save and loading it.
    • [Mekanism] Broken tags in Mekanism recipes detected, please check server logs for details. You will be missing some recipes and machines may not accept expected inputs. Do you use KubeJS? It is some kind of bug with it and not fixed A workaround is setting "allowAsyncStreams" to false in the KubeJS common config file https://github.com/KubeJS-Mods/KubeJS/issues/1016   For the rest of your issues, keep deleting these files - now it is the jei-server.toml file If the file is not in config, check the worldsave serverconfig folder These files usually break after updating mods, game crashes or force closing the game    
  • Topics

×
×
  • Create New...

Important Information

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