Jump to content

Adding a potion effect


Ablaze

Recommended Posts

Hello!

    My name is Ablaze. I'm relatively new to Forge modding, but I'm doing my best. I want to add a potion effect to a food item. If it helps, I follow Wuppy29's tutorials.

 

Here is my Tutorial.java

 

package tutorial;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.potion.Potion;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod(modid = Tutorial.modid, name = "Tutorial Mod", version = "1.0")
@NetworkMod(clientSideRequired = true, serverSideRequired = false)
public class Tutorial {
public static final String modid = "AblazeTheBest_TutorialMod";

public static Block fieryIndestuctibleBlock;

public static Item fieryFood; 
@EventHandler
public void load(FMLInitializationEvent event)
{
	fieryIndestuctibleBlock = new BlockTutorialBlock(500, Material.rock).setUnlocalizedName("fieryIndestuctibleBlock");
	GameRegistry.registerBlock(fieryIndestuctibleBlock, modid + fieryIndestuctibleBlock.getUnlocalizedName().substring(5));
	LanguageRegistry.addName(fieryIndestuctibleBlock, "Fiery Indestructible Block");

	fieryFood = new ItemTutorial(5000, 3, 12.0f, false).setUnlocalizedName("fieryFood").setPotionEffect(Potion.fireResistance, 30, 0, 1.0F);
	GameRegistry.registerItem(fieryFood, modid + fieryFood.getUnlocalizedName().substring(5));
	LanguageRegistry.addName(fieryFood, "Fiery Food");
}
}

 

This is the line with the error:-

fieryFood = new ItemTutorial(5000, 3, 12.0f, false).setUnlocalizedName("fieryFood").setPotionEffect(Potion.fireResistance, 30, 0, 1.0F);

 

The error is:-

The method setPotionEffect(String) in the type Item is not applicable for the arguments (Potion, int, int, float)

 

BlockTutorialBlock.java:-

 

package tutorial;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockTutorialBlock extends Block{

public BlockTutorialBlock(int id, Material material) {
	super(id, material);
	this.setCreativeTab(CreativeTabs.tabBlock);
	this.setHardness(2.0f);
	this.setResistance(18000000.0f);
}

@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister par1IconRegister)
{
	this.blockIcon = par1IconRegister.registerIcon(Tutorial.modid + ":" + (this.getUnlocalizedName().substring(5)));
}

}

 

ItemTutorial.java:-

 

package tutorial;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemFood;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ItemTutorial extends ItemFood{

public ItemTutorial(int id, int hunger, float saturation, boolean wolfFood) {
	super(id, hunger, saturation, wolfFood);
	this.setCreativeTab(CreativeTabs.tabFood);
}

@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister par1IconRegister)
{
	this.itemIcon = par1IconRegister.registerIcon(Tutorial.modid + ":" + (this.getUnlocalizedName().substring(5)));
}

}

 

What I want it to do:Add Fire Resistance to the item Fiery Food.

What it is doing:Giving an error saying

The method setPotionEffect(String) in the type Item is not applicable for the arguments (Potion, int, int, float)

 

Please reply.

 

Regards,

Ablaze.

 

 

 

Add me on Skype: AblazeTheBest. Send a message saying "#HeyAblaze"

 

Currently: Making a mod!

Link to comment
Share on other sites

What I did in my mod was put

 

 

this.setPotionEffect(Potion.confusion.id, 100, 0, 1.0F); //potion effect, duration, effect level, probability of effect (1.0F = always, 0.0F = never)

 

 

in the same area you put

 

 

super(id, hunger, saturation, wolfFood);

this.setCreativeTab(CreativeTabs.tabFood);

 

 

so I advise trying

 

 

public ItemTutorial(int id, int hunger, float saturation, boolean wolfFood) {

super(id, hunger, saturation, wolfFood);

this.setCreativeTab(CreativeTabs.tabFood);

                this.setPotionEffect(Potion.fireResistance.id, 100, 0, 1.0F); //potion effect, duration, effect level, probability of effect (1.0F = always, 0.0F = never)

}

Link to comment
Share on other sites

Thanks a lot for the quick reply guys! I solved the problem on my own. This was the problem- there is a setPotionEffect method in the Item class. That one uses a string. There is a setPotionEffect method in the ItemFood class, which uses int, int, int float. I was trying to use the latter, but java for some reason was using the former. This is how I fixed the code, for anyone else having the same problem, for later reference.

 

fieryFood = new ItemTutorial(5000, 3, 12.0f, false).setPotionEffect(Potion.fireResistance.id, 5, 0, 0.9f);
fieryFood.setUnlocalizedName("fieryFood");

 

Thanks a lot,

Ablaze.

 

P.S. Locking the topic.

Add me on Skype: AblazeTheBest. Send a message saying "#HeyAblaze"

 

Currently: Making a mod!

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • They were already updated, and just to double check I even did a cleanup and fresh update from that same page. I'm quite sure drivers are not the problem here. 
    • i tried downloading the drivers but it says no AMD graphics hardware has been detected    
    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • 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;     }  
  • Topics

×
×
  • Create New...

Important Information

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