public void touch(Entity self, Entity other, Plane plane, Surface surf) { if ((other.flags & (Constants.FL_FLY | Constants.FL_SWIM)) != 0) return; if ((other.svflags & Constants.SVF_DEADMONSTER) != 0) return; if (0 == (other.svflags & Constants.SVF_MONSTER)) return; // set XY even if not on ground, so the jump will clear lips other.velocity[0] = self.movedir[0] * self.speed; other.velocity[1] = self.movedir[1] * self.speed; if (other.groundentity != null) return; other.groundentity = null; other.velocity[2] = self.movedir[2]; }