BiomesOPlenty/common/biomesoplenty/potions/PotionEventHandler.java

72 lines
2.1 KiB
Java

package biomesoplenty.potions;
import java.util.Random;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.living.EnderTeleportEvent;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import biomesoplenty.api.Potions;
public class PotionEventHandler
{
@ForgeSubscribe
public void onEntityUpdate(LivingUpdateEvent event)
{
if (event.entityLiving.isPotionActive(Potions.paralysis.get()))
{
event.entityLiving.motionX = 0.0;
if (!event.entityLiving.isAirBorne) {
event.entityLiving.motionY = 0.0;
}
event.entityLiving.motionZ = 0.0;
if (event.entityLiving instanceof EntityCreeper) {
((EntityCreeper)event.entityLiving).setCreeperState(-1);
}
if (event.entityLiving.getActivePotionEffect(Potions.paralysis.get()).getDuration() == 0)
{
event.entityLiving.removePotionEffect(Potions.paralysis.get().id);
return;
}
}
if (event.entityLiving.isPotionActive(Potions.possession.get()))
{
Random rand = event.entityLiving.worldObj.rand;
double posX = event.entityLiving.posX;
double posY = event.entityLiving.posY;
double posZ = event.entityLiving.posZ;
double randX = 1.0 - (rand.nextDouble() * 2.0);
double randY = (double) rand.nextInt(3);
double randZ = 1.0 - (rand.nextDouble() * 2.0);
event.entityLiving.motionX = 0.0;
event.entityLiving.motionY = 0.0;
event.entityLiving.motionZ = 0.0;
if (rand.nextInt(5) == 0)
{
if (!event.entityLiving.worldObj.checkBlockCollision(event.entityLiving.boundingBox.offset(randX, randY, randZ)))
event.entityLiving.setPosition(posX + randX, posY + randY, posZ + randZ);
}
if (event.entityLiving.getActivePotionEffect(Potions.possession.get()).getDuration() == 0)
{
event.entityLiving.removePotionEffect(Potions.possession.get().id);
return;
}
}
}
@ForgeSubscribe
public void onEndermanTP(EnderTeleportEvent event)
{
if (event.entityLiving.isPotionActive(Potions.paralysis.get())) {
event.setCanceled(true);
}
}
}