leonardude Posted November 2, 2013 Posted November 2, 2013 Hello everyone! I'm leonardude, and I've been searching around and I can't figure out how to make a custom liquid that has potion effects. Thanks in advance for helping me! ;D ;D Leonardude
leonardude Posted November 2, 2013 Author Posted November 2, 2013 How would I use onEntityCollidedWithBlock to release the potion effect on the entity? I don't really know how to use that method.
EducationalPurposes Posted November 2, 2013 Posted November 2, 2013 Well, first take a look at the method, how it should look in your code: @Override public void onEntityCollidedWithBlock( World world, int x, int y, int z, Entity entity ) {} Now, we have an Entity. What can we do with an Entity? Yeah, add the potion effect: public void onEntityCollidedWithBlock( World world, int x, int y, int z, Entity entity ) { // Dont know if you need to check if the world is remote entity.addPotionEffect( new MyPotionEffect() ) // The argument obviously must be instanceof PotionEffect } From here you are on you're own! I am fairly new to Java and modding, so my answers are not always 100% correct. Sorry for that!
leonardude Posted November 2, 2013 Author Posted November 2, 2013 There is no such thing as entity.addPotionEffect I still don't know what to do. I made a potion effect and a liquid, but I still don't know how to add the potion effect to the liquid.
Mazetar Posted November 2, 2013 Posted November 2, 2013 Have you checked the methods in EntityLivingBase? :=P Quote If you guys dont get it.. then well ya.. try harder...
leonardude Posted November 3, 2013 Author Posted November 3, 2013 I can't locate the class EntityLivingBase
joaopms Posted November 3, 2013 Posted November 3, 2013 Try something like this (didn't tested it): @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { if (entity instanceof EntityPlayer) { ((EntityPlayer) entity).addPotionEffect(new PotionEffect(yourArgumentsHere)); } }
Mazetar Posted November 3, 2013 Posted November 3, 2013 On 11/3/2013 at 12:28 AM, leonardude said: I can't locate the class EntityLivingBase CTRL+SHIFT+T ? Quote If you guys dont get it.. then well ya.. try harder...
leonardude Posted November 3, 2013 Author Posted November 3, 2013 I have written the code that you said into my liquid block file and it didn't work. This is the code for my that has to do with the liquid in my mod's main class: //Define Fluids public static Fluid fluidCorrosiveAcid; public static Block blockCorrosiveAcid; //Initialize Fluids fluidCorrosiveAcid = new FluidCorrosiveAcid(); blockCorrosiveAcid = new BlockCorrosiveAcid(3200); //Register Fluids To The Game GameRegistry.registerBlock(blockCorrosiveAcid); //Register Names Of Fluids LanguageRegistry.addName(blockCorrosiveAcid, "Corrosive Acid"); This is the code that has to do with the potion in my mod's main class: //Define Potions public static Potion corrosiveAcid; @PreInit public void preInit(FMLPreInitializationEvent event) { Potion[] potionTypes = null; for (Field f : Potion.class.getDeclaredFields()) { f.setAccessible(true); try { if (f.getName().equals("potionTypes") || f.getName().equals("field_76425_a")) { Field modfield = Field.class.getDeclaredField("modifiers"); modfield.setAccessible(true); modfield.setInt(f, f.getModifiers() & ~Modifier.FINAL); potionTypes = (Potion[])f.get(null); final Potion[] newPotionTypes = new Potion[256]; System.arraycopy(potionTypes, 0, newPotionTypes, 0, potionTypes.length); f.set(null, newPotionTypes); } } catch (Exception e) { System.err.println("Severe error, please report this to the mod author:"); System.err.println(e); } } MinecraftForge.EVENT_BUS.register(new ZetherEventHooks()); } //Initialize Potions corrosiveAcid = new PotionCorrosiveAcid(32, false, 0).setPotionName("corrosiveAcid"); This is the code for my FluidCorrosiveAcid: package com.leonardude.zether.blocks; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; public class FluidCorrosiveAcid extends Fluid { public FluidCorrosiveAcid() { super("fluidCorrosiveAcid"); this.setDensity(10); this.setViscosity(1000); FluidRegistry.registerFluid(this); } } This is the code for my BlockCorrosiveAcid: package com.leonardude.zether.blocks; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.potion.PotionEffect; import net.minecraft.util.Icon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fluids.BlockFluidClassic; import com.leonardude.zether.main.Zether; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BlockCorrosiveAcid extends BlockFluidClassic { public BlockCorrosiveAcid(int id) { super(id, Zether.fluidCorrosiveAcid, Material.water); this.setCreativeTab(CreativeTabs.tabBlock); Zether.fluidCorrosiveAcid.setBlockID(id); } @Override public void onEntityCollidedWithBlock( World world, int x, int y, int z, Entity entity ) { if (entity instanceof EntityLiving) { ((EntityLiving)entity).addPotionEffect(new PotionEffect(Zether.corrosiveAcid.id, 200, 0)); } } @Override @SideOnly(Side.CLIENT) public Icon getIcon(int side, int meta) { return Block.waterMoving.getIcon(side, meta); } @Override public int colorMultiplier(IBlockAccess iblockaccess, int x, int y, int z) { return 0x66FF00; } } This is the code for my PotionCorrosiveAcid: package com.leonardude.zether.potions; import net.minecraft.potion.Potion; public class PotionCorrosiveAcid extends Potion { public PotionCorrosiveAcid(int id, boolean par2, int par3) { super(id, par2, par3); } } And this is the code for the event hook that has to do with the potion: package com.leonardude.zether.event; import net.minecraft.util.DamageSource; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import com.leonardude.zether.main.Zether; public class ZetherEventHooks { @ForgeSubscribe public void onEntityUpdate(LivingUpdateEvent event) { if (event.entityLiving.isPotionActive(Zether.corrosiveAcid)) { if (event.entityLiving.worldObj.rand.nextInt(20) == 0) { event.entityLiving.attackEntityFrom(DamageSource.lava, 2); if (event.entityLiving.getActivePotionEffect(Zether.corrosiveAcid).getDuration()==0) { event.entityLiving.removePotionEffect(Zether.corrosiveAcid.id); return; } } } } } Do I have to register the potion to the game? If so how do I do that? Please help me, as I have no idea what I am doing wrong!!! Thanks, in advance!
PeaceKeeper Posted June 5, 2016 Posted June 5, 2016 please take a look at this repo: https://github.com/TheGrovesyProject101/ModdingTutorials/blob/master/src/com/thegrovesyproject/block/TutBlock.java it is not my so... if you find it useful thank the auther. life is easy if you stay claim and code
Leviathan143 Posted June 6, 2016 Posted June 6, 2016 On 6/5/2016 at 11:49 PM, PeaceKeeper said: please take a look at this repo: https://github.com/TheGrovesyProject101/ModdingTutorials/blob/master/src/com/thegrovesyproject/block/TutBlock.java it is not my so... if you find it useful thank the auther. Reply #9 on: November 03, 2013 Do not necropost, it's common internet etiquette.
Recommended Posts