Jump to content

[1.7.10] [Solved] Remove/disable vanilla items


Erfurt

Recommended Posts

Hey guys,

 

So I'm trying to remove/disable wooden and stone tools for my mod. I would like to have a config file aswell where I can set the value to true or false.

So I have two questions, that I haven't been able to figure out myself, or find anything about on google.

Firstly, I can't figure out how to disable/remove any items.

And Secondly, I have no idea how the code should be when it gets the value from the config file. I know how to make the config file and how to add lines and stuff to it, but I don't know how to let the config file, choose wheither to remove/disable the items.

 

Any help would be great, even a link to a thread or tutorial is fine :)

Link to comment
Share on other sites

I don't recommend you disable items completely since another mod may require an item for it's recipe and you would in effect, ruin that mod. But you could do something similar to what IguanaTweaks (or is it base Tinkers Construct?) and make the vanilla tools useless by removing their ability to mine blocks. I'm not entirely sure how it's implemented but you could perhaps subscribe to the ItemCraftedEvent which fires right before an item is created and remove it's damage if it's a vanilla tool.

Developing the Spiral Power Mod .

こんにちは!お元気ですか?

Link to comment
Share on other sites

I don't recommend you disable items completely since another mod may require an item for it's recipe and you would in effect, ruin that mod. But you could do something similar to what IguanaTweaks (or is it base Tinkers Construct?) and make the vanilla tools useless by removing their ability to mine blocks. I'm not entirely sure how it's implemented but you could perhaps subscribe to the ItemCraftedEvent which fires right before an item is created and remove it's damage if it's a vanilla tool.

 

That's why I want to use the config file, so that people can allow the items, and make the mods works again.

 

Either way this mod, is most likely only going to be for my own private use on my own server/client.

Link to comment
Share on other sites

Fair enough mate. I can't actually help you on the config part of things because I haven't played with it, hopefully someone else will come along for that. However if you want to straight up remove recipes you could get an instance of the recipe list from the CraftingManager class and iterate through removing the items you don't want from the list.. Something like this:

 

public static void removeRecipe()
{
     List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();
     Iterator<IRecipe> remover = recipes.iterator();
     
     while(remover.hasNext())
     {
          ItemStack itemStack = remover.next().getRecipeOutput();
          // check for items and remove them
     }
}

 

Developing the Spiral Power Mod .

こんにちは!お元気ですか?

Link to comment
Share on other sites

Fair enough mate. I can't actually help you on the config part of things because I haven't played with it, hopefully someone else will come along for that. However if you want to straight up remove recipes you could get an instance of the recipe list from the CraftingManager class and iterate through removing the items you don't want from the list.. Something like this:

 

public static void removeRecipe()
{
     List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();
     Iterator<IRecipe> remover = recipes.iterator();
     
     while(remover.hasNext())
     {
          ItemStack itemStack = remover.next().getRecipeOutput();
          // check for items and remove them
     }
}

 

Cool I will try it first thing in the morning, thanks for your help ☺

Link to comment
Share on other sites

Fair enough mate. I can't actually help you on the config part of things because I haven't played with it, hopefully someone else will come along for that. However if you want to straight up remove recipes you could get an instance of the recipe list from the CraftingManager class and iterate through removing the items you don't want from the list.. Something like this:

 

public static void removeRecipe()
{
     List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();
     Iterator<IRecipe> remover = recipes.iterator();
     
     while(remover.hasNext())
     {
          ItemStack itemStack = remover.next().getRecipeOutput();
          // check for items and remove them
     }
}

 

I can't get it work sadly, I might be doing something wrong when adding the items, it should remove.

I'm adding this line.

// check for items and remove them
itemStack = new ItemStack(Items.wooden_axe);

Link to comment
Share on other sites

You'll want to pull the next ItemStack the remover is looking at out of the recipe list to check, and then check to see if it matches the item you want to remove.

 

     ItemStack itemstack = remover.next().getRecipeOutput();

     if(itemstack != null && itemstack.getItem() == Items.whatever this item is)
    {
          remover.remove();

     }

 

You could then expand with more else ifs in the list checking for more items or alternatively you could check for blocks with Item.getItemFromBlock(Blocks.the block to remove).

 

Personally I have it more modularized with:

 

public static void removeCraftingRecipe(Item item)
{
     List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();
     Iterator<IRecipe> remover = recipes.iterator();
     
     while(remover.hasNext())
     {
    	 ItemStack itemstack = remover.next().getRecipeOutput();

		if(itemstack != null && itemstack.getItem() == item)
		{
			remover.remove();
		}
     }
}

 

So I can just call it per item I want to remove instead of expanding the if statements to include new items

Developing the Spiral Power Mod .

こんにちは!お元気ですか?

Link to comment
Share on other sites

You'll want to pull the next ItemStack the remover is looking at out of the recipe list to check, and then check to see if it matches the item you want to remove.

 

     ItemStack itemstack = remover.next().getRecipeOutput();

     if(itemstack != null && itemstack.getItem() == Items.whatever this item is)
    {
          remover.remove();

     }

 

You could then expand with more else ifs in the list checking for more items or alternatively you could check for blocks with Item.getItemFromBlock(Blocks.the block to remove).

 

Personally I have it more modularized with:

 

public static void removeCraftingRecipe(Item item)
{
     List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList();
     Iterator<IRecipe> remover = recipes.iterator();
     
     while(remover.hasNext())
     {
    	 ItemStack itemstack = remover.next().getRecipeOutput();

		if(itemstack != null && itemstack.getItem() == item)
		{
			remover.remove();
		}
     }
}

 

So I can just call it per item I want to remove instead of expanding the if statements to include new items

 

I see, I will try it later, I don't really have the time right now :)

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
    • Remove Instant Massive Structures Mod from your server     Add new crash-reports with sites like https://paste.ee/  
    • Update your drivers: https://www.amd.com/en/support/graphics/amd-radeon-r9-series/amd-radeon-r9-200-series/amd-radeon-r9-280x
  • Topics

×
×
  • Create New...

Important Information

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