Yes, I have thought of using a TickHandler before. The problem is, the screen swaying effect is not as simple as "increase player speed by 2".
f2 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * par1;
if (f2 > 0.0F)
{
byte b0 = 20;
if (this.mc.thePlayer.isPotionActive(Potion.confusion))
{
b0 = 7;
}
float f3 = 5.0F / (f2 * f2 + 5.0F) - f2 * 0.04F;
f3 *= f3;
GL11.glRotatef(((float)this.rendererUpdateCount + par1) * (float)b0, 0.0F, 1.0F, 1.0F);
GL11.glScalef(1.0F / f3, 1.0F, 1.0F);
GL11.glRotatef(-((float)this.rendererUpdateCount + par1) * (float)b0, 0.0F, 1.0F, 1.0F);
}
this.orientCamera(par1);
(As posted earlier)
Either that or I'm not thinking this through.
Regarding the switching the effect on and off, it is handled by a custom potion effect (which will give the swaying camera, then a bunch of other vanilla potion effects). Why not just use the vanilla Confusion potion effect? Simply because it'll look ugly (having two potion effects added).